我的主從表是用ADODataSet,在插入后存盤,程序如下. 
  DM.ADOConnection.BeginTrans;
  try
     DataSet1.UpdateBatch();//主表保存
     DataSet2.UpdateBatch();//从表保存
  except
    ADOConnection.RollbackTrans;
  end;
跟蹤SQL-SERVER 的SQL Profiler得出分別用了針對兩個表用了insert語句, 當在存
盤時明細表的存儲過程出錯, 系統回滾, 當我修正明細數據后, 再存盤,跟蹤SQL-SERVER
的SQL Profiler 發現程序默認主表已插入,只插入從表,這要如何解決. 

解决方案 »

  1.   

    错误的时候cacelbatch就可以了!
      

  2.   

    补充题目: 
    //首先设置DataSet的LockType 为ltBatchOptimistic
    //提交时如下!
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
    ADOConnection1.BeginTrans;//事务开始
    try
      ADOQuery1.UpdateBatch(arAll);
      ADOQuery2.UpdateBatch(arAll);
      ADOConnection1.CommitTrans;//事务结束
    except
      ADOConnection1.RollbackTrans;//出错时回滚
      raise;
    end;
    如果, ADOQuery2.UpdateBatch(arAll);造成提交失败(失败原因是数据不完整).
    当更改完整之后.再进行提交,事务成功.则ADOQuery2的数据集正常提交,而
    ADOQuery1的数据集没有提交.
      

  3.   

    检查看看,设置locktype的属性是不是ltBatchOptimistic