我使用的是adoquery和dbgrideh查询数据,同时想在grideh中实现批量数据修改,该如何写??

解决方案 »

  1.   

    procedure Terp.th(component:string;form:string);
    var  clpbrd:TClipBoard;
    begin
     clpbrd:=TClipBoard.Create;
    with  application.FindComponent(form) as tform  do
    begin
      with tdbgrideh(FindComponent(component)) do
       begin
        with DataSource.DataSet do
        begin
        Book:=Selection.rect.TopRow;
         while True do begin
           Edit;
         fieldbyname(SelectedField.FieldName).value:=clpbrd.AsText;
         Post;
         if CompareBooks(Pointer(Selection.Rect.BottomRow),Pointer(Book)) = 0 then Break;
          Next;
          if Eof then Break;
         end;
        end;
       end;
    end;
    end;
      erp.th(ActiveControl.Name,'sspbm');
      

  2.   

    还有一个问题,就是当查询出数据以后,我点击dbgrideh中的某一个单元格,然后修改其内容,修改的时候还没有什么问题,只要焦点转移掉,他就会把修改的数据存入数据库里面了,怎么样才能把这个自动存储去掉?
      

  3.   


    将adoquery1的locktype 设为 :ltBatchOptimistic这样保存的时候这样写就可以避免直接保存的问题了。 try
        adoquery1.State in [dsinsert,dsedit] then adoquery1.Post;
       adoquery1.UpdateBatch();
     except
       raise;
     end;
      

  4.   

    正确
    UpdateBatch把内存中修改的记录一并提交到数据库