Query1,Query2:TQuery;
Query1的CachedUpdates为True,RequestLive为True;
Query1中查询几个表的数据(是嵌套查询),在Query1的OnUpdateRecord事件中自己写入更新数据的代码
Query1UpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
  s_bzbh:=DataSet.FieldByName('f_bmbm').AsString ;              //班组编号
  s_desl:=StrToInt(DataSet.FieldByName('f_desl').AsString) ; 
  With Query2 do
  beign
     close;
     sql.clear;
     sql.add('Update______');
     ExecSQL;
  end;
end;
我在DBRrid上修改了多条数据为什么在更新时只更新一条数据(正好是当前记录)
谢谢!

解决方案 »

  1.   

    当然不能这样写了,用UPDATE来更新的话,你会多次CLOSE这个数据集(QUERY),那么,以往更新的数据本来是存在CACHE中的,QUERY一旦被CLOSE的话,那么CACHE中的内容就丢失了,如果要成批更新,这样写才行:
       Query1UpdateRecord(DataSet: TDataSet;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    begin
      s_bzbh:=DataSet.FieldByName('f_bmbm').AsString ;              //班组编号
      s_desl:=StrToInt(DataSet.FieldByName('f_desl').AsString) ; 
      With Query2 do
      beign
         close;
         sql.clear;
         sql.add('select * from ______');
         Open;
         while not eof do
         begin 
           fieldbyname('fieldname').asstring := (....);
           post;
           next;
         end;
      end;
    end;
      

  2.   

    看清楚啦我上面的用的是CachedUpdate啊!是通过Buffer内的记录一笔一笔去更新数据库数据的!