入库单录入时可以在DBGrid1中一次性录入多条记录,保存时我想修改库存表中的相应的记录,可是这样的话就会用到while语句一个一个地修改速度太慢,能不能一次性修改?

解决方案 »

  1.   

    可以,用批量处理就可以了,建议你去2ccc.com下载个例子看看,还是比较简单的
      

  2.   

    //修改库存表中的现存数量
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('Select * from RukuTmp');
    ADOQuery1.Open;
    //从入库临时表中查找所有数据
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
      ADOQuery2.Close;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Add('Select * from Kucun where ChID=:a');
      ADOQuery2.Parameters.ParamByName('a').Value:=ADOQuery1.fieldbyname('ChID').AsString;
      ADOQuery2.Open;
      ADOQuery2.Edit;
      ADOQuery2.FieldByName('Kcsl').AsFloat:=ADOQuery2.fieldbyname('Kcsl').AsFloat
        +ADOQuery1.fieldbyname('Rksl').AsFloat;   
      ADOQuery2.Post;
      ADOQuery1.Next;
    end;
      

  3.   

    update Kucun 
    set Kcsl=Kucun.Kcsl+RukuTmp.Rksl
    from Kucun ,RukuTmp
    where Kucun.ChID=RukuTmp.ChID
      

  4.   

    用SUM求和
    with ADOQuery1 do
    begin
      close;
      sql.clear;
      sql.add('update Kucun set Kcsl = c.Kcsl from (select ChID,sum(Kcsl) as Kcsl from RukuTmp group by ChID) c, warehouse where Kucun.ChID =c.ChID ');
      execsql;
    end;
      

  5.   

    madyak(无天) ( ) 
    我试了,你的方法不对,Update后不能连接两个表。
      

  6.   

    我是Access数据库,运行时提示:
    语法错误(操作符丢失)在查询表达式'Kucun.Kcsl+RukuTmp.Rksl from Kucun'中。所以我判定是',RukuTmp'没有被程序识别出来,是不是update后只能跟一个表?