起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 509|回复: 22

史上最头痛的问题。**

[复制链接]
发表于 2008-8-23 12:43:24 | 显示全部楼层 |阅读模式
程序在开发平台调试没问题,从初始化运行调试也没问题,可直接进运行平台就不行了。
出问题的代码
procedure TCBSFJYT.BitBtn6Click(Sender: TObject);
var return_msg:Integer;
    curcount,totalcount:integer;
    curpos:Float;
begin
   if not DataSetBrokerCBSJXZ.DataSet.IsEmpty then
      begin
        if machine_port = -1 then
           begin
              Jsdialogs.ShowMsg('请选择通信端口后再下载抄表数据!','提示');
              exit;
           end;
        if downfilebz = 'First' then
           begin
               Borland.Delphi.Windows.CopyFile('C:\Program Files\Justep\Business 3.0\Bin\cswy\cb_cswy.dbf','C:\Program Files\Justep\Business 3.0\Bin\cb_cswy.dbf',false);
               ADOConnection1.Execute('delete from cb_cswy',return_msg,[]);
               ADODataSetCB.Close;
               ADODataSetCB.CommandText:='select * from cb_cswy';
               ADODataSetCB.Open;
               Panel10.Visible:=True;
               Panel10.Caption:='正在生成DBF文件...';
               Self.Refresh;
               DataSetBrokerCBSJXZ.DataSet.First;
               totalcount:=DataSetBrokerCBSJXZ.DataSet.RecordCount;
               curcount:=1;
               ProgressBar1.Min:=0;
               ProgressBar1.Max:=totalcount;
               ProgressBar1.Position:=0;
               while not DataSetBrokerCBSJXZ.DataSet.Eof do
                  begin
                     ADODataSetCB.Insert;
                     ADODataSetCB.FieldByName('USER_ID').AsString :=DataSetBrokerCBSJXZ.DataSet.FieldByName('USER_ID').AsString;     //用户号
                     ADODataSetCB.FieldByName('USER_NAME').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('USER_NAME').AsString; //用户名
                     ADODataSetCB.FieldByName('METER_ID').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('METER_ID').AsString;   //表卡号
                     ADODataSetCB.FieldByName('DF_DATE').AsString := SysUtils.DateTimeToStr(DataSetBrokerCBSJXZ.DataSet.FieldByName('DF_DATE').AsDateTime);    //电费日期
                     ADODataSetCB.FieldByName('CARD_TYPE').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('CARD_TYPE').AsString;   //表卡类型
                     ADODataSetCB.FieldByName('USER_ADDRE').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('User_Address').AsString;//用户地址
                     ADODataSetCB.FieldByName('OWNER_BURE').AsString:= DataSetBrokerCBSJXZ.DataSet.FieldByName('BUREAU_NAME').AsString; //所属供电所
                     ADODataSetCB.FieldByName('OWNER_AREA').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('AREA_NAME').AsString;//所属台区
                     ADODataSetCB.FieldByName('EPH_RATIO').AsString := DataSetBrokerCBSJXZ.DataSet.FieldByName('EPH_RATIO').AsString; //有功倍率
                     ADODataSetCB.FieldByName('CUR_SMOOTH').AsFloat := 0; //本月平抄
                     ADODataSetCB.FieldByName('PRE_SMOOTH').AsFloat := DataSetBrokerCBSJXZ.DataSet.FieldByName('PRE_SMOOTH').AsFloat;//上月抄码
                     ADODataSetCB.FieldByName('CBBZ').AsString := '0'; //抄表标志
                     ADODataSetCB.FieldByName('CBSJ').AsString := '';  //抄表时间
                     ADODataSetCB.FieldByName('ZDL').AsFloat := 0;  //总电量
                     ADODataSetCB.UpdateRecord;
                     curpos:=System.Math.Round((curcount/totalcount)*100);
                     Label14.Caption:='当前进度: '+ SysUtils.FloatToStr(curpos)+'%';
                     ProgressBar1.Position:=curcount;
                     self.Refresh;
                     DataSetBrokerCBSJXZ.DataSet.Next;
                     Inc(curcount);
                  end;
             ADODataSetCB.Close;
             Label14.Caption:='';
             ProgressBar1.Position:=0;
          end;
          ADOConnection1.Execute('delete from cb_cswy',return_msg,[]);
          if downfilebz = 'complete' then
             begin
                Jsdialogs.ShowMsg('抄表数据已下载到抄表机!','提示');
                exit;
             end;

          if (downfilebz='First') or (downfilebz='anothertime') then
             begin
                 Panel10.Caption:='正在打开抄表机的通信端口...';
                 Panel10.Visible:=True;
                 Self.Refresh;
                 return_msg:=CBSFJZYJ.cbsfj_H9000.openport(machine_port);   //打开端口
                 if return_msg <> machine_port then
                    begin
                       Panel10.Visible:=False;
                       Jsdialogs.ShowError('打开抄表机端口错误('+SysUtils.IntToStr(return_msg)+')!','错误');
                       downfilebz:='anothertime';
                       exit;
                    end;
                    return_msg:=0;
                    if CBSFJZYJ.cbsfj_H9000.findfile(machine_port,'cb_cswy.dbf') = 0 then
                       return_msg:=CBSFJZYJ.cbsfj_H9000.deletefile(machine_port,'cb_cswy.dbf');//删除抄表机内存中的抄表数据

                    if return_msg = 0 then
                       begin
                          Panel10.Caption:='正在下载抄表数据到抄表机...';
                          Label18.Visible:=True;
                          Self.Refresh;
                          return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf'); //下载抄表数据到抄表机
                       end
                    else
                      begin
                        Jsdialogs.ShowError('删除cb_cswy.dbf文件失败('+SysUtils.IntToStr(return_msg)+')!','错误');
                        downfilebz:='anothertime';
                        Panel10.Visible:=False;
                        exit;
                      end;
                    if return_msg = 0 then
                       begin
                          Jsdialogs.ShowMsg('下载抄表数据成功!','提示');
                          Panel10.Visible:=False;
                          downfilebz:='complete';
                          CBSFJZYJ.cbsfj_H9000.closeport();
                       end
                    else
                       begin
                         Jsdialogs.ShowError('下载cb_cswy.dbf文件失败('+SysUtils.IntToStr(return_msg)+')!','错误');
                         Panel10.Visible:=False;
                         downfilebz:='anothertime';
                         exit;
                       end;
             end
       end
   else
      Jsdialogs.ShowMsg('没有抄表数据可下载!','提示');
end;
其中的CBSFJZYJ.cbsfj_H9000.openport,findfile,deletefile,downfile都是调用的单片机公司提供的动态库里的函数。
为什么直接在运行平台里执行到这句的时候:                        return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf'); //下载抄表数据到抄表机
就提示命令操作失败!
在开发平台和初始化运行的时候可以正常从单片机下载数据。
回复

使用道具 举报

发表于 2008-8-23 13:05:13 | 显示全部楼层
调试运行和正式运行时,具体环境有什么差异吗?

有详细的错误信息吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-23 15:36:50 | 显示全部楼层
详细的错误倒是没有。就是那执行
return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf'); //下载抄表数据到抄表机
这句的时候在运行平台下就会提示命令执行不成功。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-23 15:52:46 | 显示全部楼层
return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf'); //下载抄表数据到抄表机
这句在开发平台何初始化运行的时候却能完成把数据下载到单片机的存储器。。
回复 支持 反对

使用道具 举报

发表于 2008-8-23 16:31:07 | 显示全部楼层
1、调试运行和正式运行时,具体环境有什么差异吗?

2、提供错误截图看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-23 16:37:22 | 显示全部楼层
我说过没有错误。
只是return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf'); //下载抄表数据到抄
这句话在运行平台里却不能正常吧数据下载到单片机的存储器里。
在开发平台和初始化运行却可以正常把数据下载到单片机的存储器里。
明白意思了吗?
回复 支持 反对

使用道具 举报

发表于 2008-8-23 16:46:24 | 显示全部楼层
用Business.exe运行报错,还是IE运行报错?
回复 支持 反对

使用道具 举报

发表于 2008-8-23 16:46:24 | 显示全部楼层
用Business.exe运行报错,还是IE运行报错?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-23 16:52:34 | 显示全部楼层
运行不报错。
怎么就没懂我意思呢。
就是return_msg:=CBSFJZYJ.cbsfj_H9000.downfile(machine_port,'cb_cswy.dbf')在开发平台和初始化运行时可以把数据下载到单片机(也就是return_msg返回0,表示执行这个动态库函数成功的把文件下载到了单片机.),而在运行平台return_msg返回的却是200,表示命令操作失败。也就是没能把文件下载到单片机。还没懂意思吗。我程序没问题怎么会报错呢?
回复 支持 反对

使用道具 举报

发表于 2008-8-23 16:57:04 | 显示全部楼层
不好意思,刚才应问的是在Business.exe是运行的,还是IE中运行的?
动态库函数 是不是第三方控件?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 03:40 , Processed in 0.042625 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表