就是下面的代码,明明是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;

解决方案 »

  1.   

    2、3、5也是根据条件随机生成的,但这里其实已作判断了为何还要添加数据'select * from savelist where ChanelNo='+quotedstr(ChanelNO),如果再添加一个判断,那程序就变的很复杂了,
      

  2.   

    还是没有解决,不知这个添加是那里来的,找了整个程序都没有发现添加的地方,困惑,有没有高手指点一下这是所有代码了,就是无缘无故会添加一些字段chanelNO为空的数据段,但空这个数据段开始的时候是绝对没有的,明明是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)));;
         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;
      

  3.   

    这个edit加post过程很方便,但是有的时候确实让人摸不着头脑,我也曾经遇到过这样的问题。给楼主个建议,还是回归到SQL语句中去做吧,用update。如果是修改的话,总不会啥都改了吧?