我用的是ADO,在DBGRID中显示数据后,我想在DBGRID中修改数据,但暂时不写回数据库,直到全部修改完之后,点积按扭时才写回数据库,怎么实现。

解决方案 »

  1.   

    用批量更新,
    打开用:
    with ADODataSet1 do begin
      CursorLocation := clUseClient;
      CursorType := ctStatic;
      LockType := ltBatchOptimistic;
      CommandType := cmdText;
      CommandText := 'SELECT * FROM Employee';
      Open;
    end;提交时
    ADODataSet1.UpdateBatch(arCurrent);
      

  2.   

    procedure TFrm_mod_cjsw.Button1Click(Sender: TObject);
    begin
         DataModule1.query1.Post;
    end;
      

  3.   

    建议你用StringGrid这样比较好控制。
      

  4.   

    ADODataSet1.UpdateBatch(arCurrent); -->ADODataSet1.UpdateBatch(arAll);
      

  5.   

    用DBGRID控件在编辑的时候,只要不移动纪录,在当前纪录编辑所有字段,只要你不post,那么不会写入数据库,所以该控件没办法实现你的要求。
    要实现,你可以用StringGrid,将所有有关数据读入,并且有个唯一的id标示,用循环语句,用“update”SQL语句更新纪录,根据条件ID=?,这样可实现你的要求
      

  6.   

    你可以用个临时库,将你的数据库表复制一份作为临时库,DBGrid与临时库相连,修改完成后用SQL语句将修改结果提交给数据库.
      

  7.   

    你的意思是同时几条还是只一条?是同时几条吧?这样用ADO好象没办法直接实现,用个CLIENTDATESET缓存一下试试吧!
      

  8.   

    谢谢各位,这个问题应该能解决了,
    还有一个是:DBGRID在FENJU这一字段上内容为空,我想在点积事件中实现填充所有的这一列,内容根据该条记录的DIAN字段填写不同的值,谢谢!!
      

  9.   

    用缓存提交啊
    ,将ADO的lockType设置成ltBatchOptimistic。然后用
    ADODataSet1.UpdateBatch提交,用ADODataSet1.CancelBatch取消。
      

  10.   

    谢谢各位,这个问题应该能解决了,
    还有一个是:DBGRID在FENJU这一字段上内容为空,我想在点积事件中实现填充所有的这一列,内容根据该条记录的DIAN字段填写不同的值,谢谢!!
      

  11.   

    这不是很简单吗?在点击事件中写一段程序:首先移到首记录,然后做循环从首记录移到末尾,每次循环根据DIAN的值计算FENJU值,循环结束最后提交。(最好用事务处理)
      

  12.   

    用Sql语句解决啦,否则就楼上的