ADOQuery1连接主表,ltOptimistic
ADOQuery2连接从表,ltBatchOptimistic
try
  ADOQuery1.Connection.BeginTrans;
  ADOQuery2.UpdateBatch;
  ADOQuery2.Post;
  ADOQuery1.Connection.CommitTrans;
except
  ADOQuery1.Connection.RollbackTrans;
end;
ADOQuery2提交成功,但ADOQuery1保存出错,在用户将ADOQuery1的数据修改
正确后再次提交,因ADOQuery2已经写入到本地缓存,无法再写到后台数据库中,
高手请告知解决方案,一定给分,并感激不尽!

解决方案 »

  1.   

    try  
      ADOQuery1.Connection.BeginTrans;
      ADOQuery2.UpdateBatch;
      ADOQuery1.Connection.CommitTrans;
    except
      ADOQuery2.CancelBatch;
      ADOQuery1.Connection.RollbackTrans;
    end;
      

  2.   

    ADOQuery1连接主表,ltOptimistic
    ADOQuery2连接从表,ltBatchOptimistic
    try
      ADOQuery1.Connection.BeginTrans;
      ADOQuery2.UpdateBatch;
      ADOQuery1.Post;
      ADOQuery1.Connection.CommitTrans;
    except
      ADOQuery1.Connection.RollbackTrans;
    end;
    贴错了,应该如上
      

  3.   

    UpDateBatch后不需Post,回滚用CancelBatch
      

  4.   

    用以下方法处理:
    p r o c e d u r e TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
    b e g i n
    A D O Query1.C o n n e c t i o n . B e g i n T r a n s ;
    e n d ;
    p r o c e d u r e TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
    b e g i n
    A D O Query1.C o n n e c t i o n  . C o m m i t T r a n s ;
    ADOQuery2.UpdateBatch
    e n d ;
    p r o c e d u r e TForm1.ADOQuery1PostError(DataSet: TDataSet; E:
    EDatabaseError; v a r Action: TDataAction);
    b e g i n
    A D O Query1.C o n n e c t i o n . R o l l b a c k T r a n s ;
    ADOQuery2.CancelBatch
    Action := daAbort;
    e n d ;
      

  5.   

    必须先提交ADOQuery2,因为这是一个大的项目中的一个子模块,
    大家必须按照规定的顺序提交,又因为ADOQuery2中用户可能输入很多数据
    所以不可CancelBatch,而且一旦ADOQuery2.UpdateBatch成功后
    虽然RollbackTrans可以保证不提交到后台数据库,但是此时本地的缓存中
    ADOQuery2已经成功写进去了,当用户把ADOQuery1的数据修改好以后再保存时,
    ADOQuery2的数据已经无法再提交到后台了!!!!!
      

  6.   

    必须先提交ADOQuery2,因为这是一个大的项目中的一个子模块,
    大家必须按照规定的顺序提交,又因为ADOQuery2中用户可能输入很多数据
    所以不可CancelBatch,而且一旦ADOQuery2.UpdateBatch成功后
    虽然RollbackTrans可以保证不提交到后台数据库,但是此时本地的缓存中
    ADOQuery2已经成功写进去了,CancelBatch已经放弃不掉了!
    当用户把ADOQuery1的数据修改好以后再保存时,
    ADOQuery2的数据已经无法再提交到后台了!!!!!
      

  7.   

    现在程序中验证ADO1的数据有效性,再用一个事物提交
      

  8.   

    if not ADOQuery1.Connection.InTransaction then
      ADOQuery1.Connection.BeginTrans
      ......