我是用ADO + ADOTable + DataSetProvider + ClientDataSet 这样的方法来实现数据的保存和提交,一般用户一个操作我都要同时update两到三张表中的数据,
我的问题是如何能保证数据在提义的都程中
要不就同时提交成功, 
如果有一个不成功全部都CancelUpdates呢?谢谢!

解决方案 »

  1.   

    if not FQuery.OpenDatabase.InTransaction then
        FQuery.OpenDatabase.StartTransaction;      try //成功
            FQuery.OpenDatabase.Commit;
            except //失败
              FQuery.OpenDatabase.Rollback;
          end;
      

  2.   

    请问楼上, FQuery是表示什么意思,
    比如我现在执行
    ClientDataSet1.applyupdate(0);
    ClientDataSet2.applyupdate(0);
    ClientDataSet3.applyupdate(0); 那么到底要如何写呢,本人刚学,还请各位帮帮忙
      

  3.   

    我看了之前一些贴子,自已是这样写的
    请大家帮忙看看if not Pos_DataModule.DM_DataModule.ADO_Connect_Pos.InTransaction then
        begin      Pos_DataModule.DM_DataModule.ADO_Connect_Pos.BeginTrans ;    // ---- 开始一个事务 ---- //
          try
            AQy_list_table.Close;
            AQy_list_table.SQL.Clear;
            AQy_list_table.SQL.ADD ('update tblTable set SOID = ''' +Fs_order_id+ ''' , OrderTime = getdate() , TableState = ''' + '1' + ''' where TableEname = ''' + Trim(DBCBx_TableNo.Text) + '''');
            AQy_list_table.ExecSQL; ;        CDS_tblSalesOrder.ApplyUpdates(0);
            cds_tblFoodOrder.ApplyUpdates(0);        Pos_DataModule.DM_DataModule.ADO_Connect_Pos.CommitTrans ;  // ---- 事务提交 ---- //      except
            CDS_tblSalesOrder.CancelUpdates ;
            cds_tblFoodOrder.CancelUpdates ;        Pos_DataModule.DM_DataModule.ADO_Connect_Pos.RollbackTrans ;  // ---- 回滚一个事务 ---- //
        end;请问这样写对不对呢