我想通过DBGrid,对表中的记录进行修改,但是现在遇到的问题是:当想要撤销对所有记录的修改时,用DBGrid1.Datasource.Dataset.Cancel,只能撤销最后一条被修改记录上的改动,怎样才能做到把所有被修改的记录全都恢复呢??

解决方案 »

  1.   

    用事务,adoconnection.begintrans开始事务,然后编辑,撤销后adoconnection.committrans.
      

  2.   

    //设为缓存更新模式
    adodataset1.locktype:=ltbatchoptimistic;
    //保存
    adodataset1.updatebatch(arall);
    //取消操作
    adodataset1.cancelbatch(arall);
      

  3.   

    先设为缓存更新模式,然后修改,如果想撤消修改则adodataset1.cancelbatch(arall);就可以了。
      

  4.   

    设置ADOTable的LockType属性为ltBatchOptimistic取消全部修改
      if ADOTable1.Active then
        ADOTable1.CancelBatch(arAll);取消选中记录的修改
      if ADOTable1.Active then
        ADOTable1.CancelBatch(arCurrent);
      

  5.   

    用事物比较好,比如:TranDatabase: TDatabase;
        _Session: TSession;设置你的TQuery什么的session name 为
    TDatabase   的session
     
     TranDatabase.StartTransaction;
      // 你的多个操作
      try
        ...
      exception
        ...
        TranDatabase.Rollback;
        exit;
      end;  try
        ...
      exception
        ...
        TranDatabase.Rollback;
        exit;
      end;
      TranDatabase.commit;
      

  6.   

    记得开始时
        _session.Open;
        user_name:= 'usr';
        passwd:= 'pass';
        Trandatabase.Params.Add('User Name='+ user_name);
        Trandatabase.Params.Add('Password='+ passwd);
        Trandatabase.Open;