程序在开发平台调试没问题,从初始化运行调试也没问题,可直接进运行平台就不行了。
出问题的代码
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'); //下载抄表数据到抄表机
就提示命令操作失败!
在开发平台和初始化运行的时候可以正常从单片机下载数据。 |