📄 u_645_command.pas
字号:
if d_1 > d_2 then
begin
MyMsgBox(' 查询数据的"日期时间"范围设置有误!前小后大','系 统 错 误', 0);
exit;
end;
sqlstr := 'select 表号,录入日期 from '+trim(edit1.Text)+'_bh'+' where 录入日期>= '''+d_1+''' and 录入日期<= '''+d_2+''' order by 录入日期' ;
end;
with datam.ADOQ3 do
begin
try
close;
sql.Clear;
sql.Add(sqlstr);
open;
f_645.DBEdit2.DataField := '表号';
except
MyMsgBox(' 查询数据失败!','系 统 错 误', 0);
exit;
end;
end;
end;
procedure TF_645.RzRadioButton6Click(Sender: TObject);
begin
rzlabeL24.Caption:='表号录入'+#13+'起始时间';
Rzmaskedit1.Visible := true;
Rzmaskedit2.Visible := true;
rzlabeL25.Visible := true;
rzlabeL25.Caption:='表号录入'+#13+'终止时间';
rzmaskedit1.Text:=formatdatetime('yyyy-mm-dd hh:nn:ss',now);
rzmaskedit2.Text:=formatdatetime('yyyy-mm-dd hh:nn:ss',now);
rzedit11.Visible := FALSE;
end;
procedure TF_645.RzRadioButton7Click(Sender: TObject);
begin
rzlabeL24.Caption:='表'+#13+'号';
Rzmaskedit1.Visible := false;
Rzmaskedit2.Visible := false;
rzlabeL25.Visible := false;
rzedit11.Visible := true;
rzedit11.Clear;
end;
procedure TF_645.RzLabel26MouseEnter(Sender: TObject);
begin
Rzlabel26.Font.Style := [fsBold,fsItalic];
Rzlabel26.Cursor := crHandPoint;
Rzlabel26.Font.Color := clblue ;
end;
procedure TF_645.RzLabel26MouseLeave(Sender: TObject);
begin
Rzlabel26.Font.Style := [fsBold];
Rzlabel26.Cursor := crDefault;
Rzlabel26.Font.Color := clNavy ;
end;
procedure TF_645.RzCheckBox1Click(Sender: TObject);
begin
if Rzcheckbox1.Checked then
begin
Rzedit12.Enabled := true;
Rzedit12.text := trim(DBedit2.Text);
end
else
begin
Rzedit12.Clear;
Rzedit12.Enabled := false;
end;
end;
procedure TF_645.DBEdit2Change(Sender: TObject);
begin
if (RzRadioGroup1.Buttons[0].Checked ) and (Rzcheckbox1.Checked)then
Rzedit12.Text := trim(dbedit2.text);
end;
procedure TF_645.RzBitBtn2Click(Sender: TObject);
var
sqlstr:string;
begin
sqlstr := 'delete from '+trim(edit1.Text)+'_bh'+' where 表号= '''+trim(dbedit2.Text)+''' ' ;
if MessageDlg('确认是要删除表号为"'+trim(dbedit2.Text)+'"的表吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
with datam.ADOQ1 do
begin
try
close;
sql.Clear;
sql.Add(sqlstr);
execsql;
MyMsgBox(' 数据已被成功删除!','成 统 提 示', 1);
except
MyMsgBox(' 删除数据失败!','系 统 错 误', 0);
exit;
end;
end;
RzBitBtn1.Click;
end;
end;
procedure TF_645.RzRadioButton1Click(Sender: TObject);
begin
COPY_fs :='1';
Rzcombobox8.ItemIndex := 3;
party:=EVEN;
end;
procedure TF_645.RzRadioButton2Click(Sender: TObject);
begin
COPY_fs :='2';
Rzcombobox8.ItemIndex := 7;
party:=EVEN;
end;
procedure TF_645.RzRadioButton3Click(Sender: TObject);
begin
COPY_fs :='3';
party:=None;
Rzcombobox8.ItemIndex := 5;
end;
procedure TF_645.RzLabel26Click(Sender: TObject);
var
i,j,m,k,fh_int,data_len:integer; //j:命令数
ml_str : array[1..100] of string; //命令数组 指令集
lrrq,cbrq,sql_str,d1,d2,bh,send,revc,message1,message2,message3:string;
fp:textfile; //文本 连接文件
ymgs,k_flag:string;
autosave:Boolean; //布尔
begin
memo1.Clear; //清空以前的显示数据
rZPROGRESSBAR1.Percent := 0; //进度条初始值为0
with datam.ADOQ4 do //adoquery4
begin
sql_str :='delete from temp'; //删除temp中数据 ,再把temp赋值
close; //修改SQl语句前先关闭
sql.Clear; //清除旧的sql语句
sql.Add(sql_str);
execsql; //execsql跟open功能一样,不过open只能对查询语句
sql_str :='select * from temp order by 抄表日期 desc'; //查询抄表日期数据
close;
sql.Clear;
sql.Add(sql_str);
execsql;
open;
Rzdbgrid2.Update; //上传
end;
//数据自动入库
if Rzradiobutton9.Checked then //若为真,就自动入库 若为假 就手工入库
autosave := true
else
autosave := false;
cbrq:=formatdatetime('yyyy-mm-dd hh:nn:ss',now); //抄表日期 日期格式
IF COPY_fs ='' then //抄表方式
begin
MyMsgBox(' 请选择合适的"通讯方式"!','系 统 错 误', 0);
exit;
end;
if trim(edit1.Text) = '' then
begin
MyMsgBox(' 请先选择合适的"表型号"!','系 统 错 误', 0);
exit;
end;
if strtoint(edit2.Text) = 0 then
begin
MyMsgBox(' 请先为该"表型号"添加"抄表命令"参数"!','系 统 错 误', 0);
exit;
end;
IF Rzradiobutton7.Checked then //若为真 单抄
if trim(Rzedit11.Text) = '' then
begin
MyMsgBox(' 请添加"表号"!','系 统 错 误', 0);
exit;
end;
if Rzchecklist1.ItemsChecked=0 then
begin
MyMsgBox('请选择抄表命令参数项!','系统提示',0);
exit;
end;
j:=1; //命令数
i:=1; //单命令合计数目
while i<= command_sum do
begin
if rzchecklist1.ItemChecked[i] then //list中选中的指令
begin
ml_str[j]:=A_command[i]; //ml_str 命令数组,指令集
inc(j); //自增
end;
inc(i);
end ;
inc(i);
while i<= rzchecklist1.Count-1 do //list中指令总数
begin
if rzchecklist1.ItemChecked[i] then
begin
ml_str[j]:=A_command[i-1];
inc(j);
end;
inc(i);
end;
try
//集抄
if Rzradiobutton6.Checked then
begin
d1:=rzmaskedit1.Text;
d2:=rzmaskedit2.Text;
sql_str :='select * from '+trim(edit1.Text)+'_bh where (录入日期>='+
' '''+d1+''') and (录入日期<= '''+d2+''') order by 录入日期' ;
with datam.ADOQ1 do
begin
close;
sql.Clear;
sql.Add(sql_str);
open;
First;
end;
if datam.ADOQ1.RecordCount <= 0 then
begin
MyMsgBox(' 未查询到该日期范围内的数据,请查看日期时间设置是否正确!',
'系 统 错 误', 0);
exit;
end
else
begin
k := datam.ADOQ1.recordcount;
memo1.Lines.Add('共抄表【'+inttostr(k)+'】块');
m := 0;
while not datam.ADOQ1.Eof do
begin
m :=m+1; //trim(cbrq);
lrrq:=datam.ADOQ1.fieldbyname('录入日期').AsString;
bh := trim(datam.ADOQ1.fieldbyname('表号').AsString);
for i :=1 to j-1 do
begin
with datam.ADOQ5 do
begin
sql_str :='select * from '+trim(edit1.Text)+' where 命令= ' +
' '''+ml_str[i]+''' ';
close;
sql.Clear;
sql.Add(sql_str);
open;
ymgs := trim(fieldbyname('掩码').AsString);
data_len := strtoint(trim(fieldbyname('长度').AsString));
k_flag := trim(fieldbyname('块标志').AsString);
//打开端口
if com_flag = 1 then
begin
CloseCOM();
com_flag :=0;
end;
OpenCOM(com_NO,baud,party);
Rzstatuspane2.Caption := '【端口】已打开';
f_645.Update;
com_flag :=1;
memo1.Lines.Add('抄表时间='+cbrq);
if COPY_fs ='1' then
begin
send:='68' + tzstrx(bh) + '68'+'0102' +tzstrx(ml_str[i]);
fh_int:=NgOUT(TRIM(send),20,50);
end
else if COPY_fs ='2' then
begin
send:='68' + tzstrx(bh) + '68'+'0102' +tzstrx(ml_str[i]);
fh_int:=EasOUT(TRIM(send),0,20,50);
end
else
begin
send:='534E4414FFFFFFFFFFFF09AF' + tzstrx(bh) + '0105' +tzstrx(ml_str[i])+'BBBBBB';
fh_int:=XcOUT(TRIM(send),20,50);
end;
memo1.Lines.Add('发送数据='+send);
case fh_int of
0:
begin
assignfile(fp,'revc.dat');
reset(fp);
readln(fp,revc);
closefile(fp);
memo1.Lines.Add('返回数据='+revc);
//处理数据
disposal_data(bh,revc,ymgs,data_len,k_flag,lrrq,cbrq,autosave);
rZPROGRESSBAR1.Percent := rZPROGRESSBAR1.Percent +i;
memo1.Lines.Add('抄表【'+bh+'】成功');
f_645.Update;
end;
-1: memo1.Lines.Add('抄表【'+bh+'】失败:无16');//MyMsgBox(' 无16!','系 统 错 误', 0);
-2: memo1.Lines.Add('抄表【'+bh+'】失败:校验错误');//MyMsgBox(' 校验错误!','系 统 错 误', 0);
-3: memo1.Lines.Add('抄表【'+bh+'】失败:无报头');//MyMsgBox(' 无报头!','系 统 错 误', 0);
-4: memo1.Lines.Add('抄表【'+bh+'】失败:其它错误');//MyMsgBox(' 其它错误!','系 统 错 误', 0);
end;
//关闭端口
if com_flag = 1 then
begin
CloseCOM();
com_flag :=0;
Rzstatuspane2.Caption := '【端口】已关闭';
f_645.Update;
end;
end; //withe
end; //for
datam.ADOQ1.Next;
rZPROGRESSBAR1.Percent := m * 100 DIV k;
end; //while
end; //if datam.ADOQ1.RecordCount <= 0 then
end
//单抄
else
begin
if trim(Rzedit11.Text) ='' then
begin
MyMsgBox(' 请输入单抄表号!','系 统 错 误', 0);
Rzedit11.SetFocus; //输入焦点
exit;
end;
bh := PadLStr(trim(Rzedit11.Text),12,'0'); //表号前面补零,自定义函数
sql_str :='select * from '+trim(edit1.Text)+'_bh where 表号='''+bh+'''';
//sql_str为 'select * from ' 430_bh where 表号='''+bh+'''';
with datam.ADOQ1 do
begin
close;
sql.Clear;
sql.Add(sql_str);
open;
end;
case datam.ADOQ1.RecordCount of
0:
begin
MyMsgBox(' 未查询到该表号数据!请确认表号的正确性','系 统 错 误', 0);
Rzedit11.SetFocus;
exit;
end;
1:
begin
lrrq:=trim(datam.ADOQ1.fieldbyname('录入日期').asstring); //变量 录入日期
for i :=1 to j-1 do //j为命令数
begin
with datam.ADOQ5 do
begin
sql_str :='select * from '+trim(edit1.Text)+' where 命令= ' +
' '''+ml_str[i]+''' ';
close;
sql.Clear;
sql.Add(sql_str);
open;
ymgs := trim(fieldbyname('掩码').AsString);
data_len := strtoint(trim(fieldbyname('长度').AsString));
k_flag := trim(fieldbyname('块标志').AsString);
//打开端口
if com_flag = 1 then //com_flag端口开关标志
begin
closeCOM();
com_flag :=0;
end;
OpenCOM(com_NO,baud,party);
Rzstatuspane2.Caption := '【端口】已打开';
f_645.Update;
com_flag :=1;
memo1.Lines.Add('抄表时间='+cbrq);
send:='68' + tzstrx(bh) + '68' + '0102'+tzstrx(ml_str[i]); //指令集
memo1.Lines.Add('发送数据='+send);
fh_int:=NgOUT(TRIM(send),20,50);
case fh_int of
0:
begin
assignfile(fp,'revc.dat');
reset(fp);
readln(fp,revc);
closefile(fp);
memo1.Lines.Add('返回数据='+revc);
memo1.Lines.Add('抄表【'+bh+'】成功');
//处理数据
disposal_data(bh,revc,ymgs,data_len,k_flag,lrrq,cbrq,autosave);
rZPROGRESSBAR1.Percent := I * 100 DIV (J-1);
end;
-1: memo1.Lines.Add('抄表【'+bh+'】失败:无16');//MyMsgBox(' 无16!','系 统 错 误', 0);
-2: memo1.Lines.Add('抄表【'+bh+'】失败:校验错误');//MyMsgBox(' 校验错误!','系 统 错 误', 0);
-3: memo1.Lines.Add('抄表【'+bh+'】失败:无报头');//MyMsgBox(' 无报头!','系 统 错 误', 0);
-4: memo1.Lines.Add('抄表【'+bh+'】失败:其它错误');//MyMsgBox(' 其它错误!','系 统 错 误', 0);
end;
//关闭端口
if com_flag = 1 then
begin
CloseCOM();
com_flag :=0;
Rzstatuspane2.Caption := '【端口】已关闭';
//rZPROGRESSBAR1.Percent := 0;
f_645.Update;
end;
end; //w
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -