当我们更改了dbgrideh中的数据时,只要移动下一行,他就会自动更新上一行的数据(数据库中的数据就已经更改了),可是有时候,我想只有让按保存按钮时才让保存,其它时候不保存,应该怎么办.请各位大侠指教.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    database1.Commit
    end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
       database1.StartTransaction;
    end;
      

  2.   

    1.定义全局变量
      bCanPost: Boolean;
    2.在数据集控件的beforepost事件里面写代码
      if (False = bCanPost) then
      begin
        DataSet.Cancel;
        DataSet.Edit;
      end;
      bCanPost := False;
    3.在保存按钮的点击事件里面
      bCanPost := True;
      ...
      post;
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      database1.Rollback;  //取消
    end;
      

  4.   

    to : jinjazz
    我没有用BDE控件,没有database呀。用的是TidyDB。to GoldShield
    说了,是它自己自动post的呀to  lzy6204(想闭门修炼)
    定义全局变量,有很多个表不是很麻烦?我先试试看。其实想问Dbgrid或Table有没有得到行记录的状态的[dsEdit? dsInsert?]?
    如果有就好办了。
      

  5.   

    这个问题很简单,我以前也遇到过,你只需要把你的adoquery的locktype设置成ltBatchOptimistic,然后点击保存按钮只需用adoquery.UpdateBatch()就可以了
      

  6.   

    如果是ADO的话用LockType:=ltBatchOptimistic就行,该项数据就保存在内存,最后提交就可以了
      

  7.   

    ADO的话用LockType:=ltBatchOptimistic该项数据就保存在内存 post也不行
    最后要adoquery要updatebatch;就ok了
      

  8.   

    问题解决,尤为感谢: lzy6204(想闭门修炼) 方法类似 lzy6204(想闭门修炼) 就不细说了。结帐