就是下面的代码,明明是EDIT,savelist表中只有2,3,5面板编号的3条信息,也就是接到2、3、5信息就改变对变的数据,但是现在奇怪了,接到比如4、6号码或空号的数据也添加在数据表中了,可没有用append啊,怎么进去的,难到edit就有添加的功能if (copy(stringreplace(Restr,' ','',[rfReplaceAll]),3,2)='03') and (copy(stringreplace(Restr,' ','',[rfReplaceAll]),5,2)='06') then //把中间的空格全部去掉,方便解析有用数据
begin
ChanelNo:=inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),1,2)));//得到面板数据后再转为10进制
Ev:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),7,4))/100);
Ei:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),11,4))/1000);;
EP:=Inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),15,4)));;
with datamodule1.ADOSavelist do
begin
close;
sql.Clear;
sql.Add('select * from savelist where ChanelNo='+quotedstr(ChanelNO));
open;
edit;
fieldbyname('Vdata').AsString:=Ev;
fieldbyname('Idata').AsString:=Ei;
fieldbyname('Pdata').AsString:=Ep;
fieldbyname('Writedate').AsString:=datetimetostr(now);
post;
end;
end;
begin
ChanelNo:=inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),1,2)));//得到面板数据后再转为10进制
Ev:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),7,4))/100);
Ei:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),11,4))/1000);;
EP:=Inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),15,4)));;
with datamodule1.ADOSavelist do
begin
close;
sql.Clear;
sql.Add('select * from savelist where ChanelNo='+quotedstr(ChanelNO));
open;
edit;
fieldbyname('Vdata').AsString:=Ev;
fieldbyname('Idata').AsString:=Ei;
fieldbyname('Pdata').AsString:=Ep;
fieldbyname('Writedate').AsString:=datetimetostr(now);
post;
end;
end;
if (copy(stringreplace(Restr,' ','',[rfReplaceAll]),3,2)='03') and (copy(stringreplace(Restr,' ','',[rfReplaceAll]),5,2)='06') then //把中间的空格全部去掉,方便解析有用数据
begin
ChanelNo:=inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),1,2)));//得到面板数据后再转为10进制
Ev:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),7,4))/100);
Ei:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),11,4))/1000);;
EP:=Inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),15,4)));;
if ChanelNO<>'' then
begin
with datamodule1.ADOChanel do
begin
close;
sql.Clear;
sql.Add('select * from Chanel where ChanelNO='+quotedstr(ChanelNO));
open;
if recordcount=1 then
begin
with datamodule1.ADOSavelist do
begin
close;
sql.Clear;
sql.Add('select * from savelist where ChanelNo='+quotedstr(ChanelNO));
open;
edit;
fieldbyname('Vdata').AsString:=Ev;
fieldbyname('Idata').AsString:=Ei;
fieldbyname('Pdata').AsString:=Ep;
fieldbyname('Writedate').AsString:=datetimetostr(now);
post;
end;
end;
end;
end;
end;
//此处给电流量进行赋值
if (copy(stringreplace(Restr,' ','',[rfReplaceAll]),3,2)='03') and (copy(stringreplace(Restr,' ','',[rfReplaceAll]),5,2)='04') then //把中间的空格全部去掉,方便解析有用数据
begin
ChanelNo:=inttostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),1,2)));//得到面板数据后再转为10进制
Ekwh:=Floattostr(strtoint64('$'+copy(stringreplace(Restr,' ','',[rfReplaceAll]),7,8))/3200);
if ChanelNO<>'' then
begin
with datamodule1.ADOChanel do
begin
close;
sql.Clear;
sql.Add('select * from Chanel where ChanelNO='+quotedstr(ChanelNO));
open;
if recordcount=1 then
begin
with datamodule1.ADOSavelist do
begin
close;
sql.Clear;
sql.Add('select * from savelist where ChanelNo='+quotedstr(ChanelNO));
open;
edit;
fieldbyname('kwhdata').AsString:=Ekwh;
// fieldbyname('Writedate').AsString:=datetimetostr(now);
post;
end;
end;
end;
end;
end;