后端數據庫為SQL SERVER200, 使用的DELPHI自帶的DBExpress數據庫組件(SQLConnection, SQLDataSet, ClientDataSet, DataSetProvider),
實現兩個ClientDataSet向后台SqlServer更新都成功時才同時Commit﹐其中任何一個失敗則同時Rollback均不在后台更新,程序見下:
procedure TForm1.Button1Click(Sender: TObject);
var
 TrsDsc1:TTransactionDesc;
begin
  trsDsc1.TransactionID := 1;
  TrsDsc1.IsolationLevel := xilREADCOMMITTED;
  DataModule2.con1.StartTransaction(TrsDsc1);
  if (DataModule2.cdsMain1.ApplyUpdates(0) = 0) and
             (DataModule2.cdsEm1.ApplyUpdates(0) = 0) then
     DataModule2.con1.Commit(TrsDsc1)
  else
  begin
    DataModule2.con1.Rollback(TrsDsc1);
    ShowMessage('have Error');
  end;
end;
 
第一個cdsMain1更新無錯(即ApplyUpdates(0) = 0), 第二個cdsEm1更新出錯(即ApplyUpdates(0) > 0, 如主鍵重復),
則事務能正確Rollback, 兩個ClientDataSet均未向后台更新, 
第二次執行程序時,由于cdsMain1中的change log已無(第一次ApplyUpdates(0) = 0會自動清除記錄改變狀態), 所以
cdsMain1.ApplyUpdates(0)并不產生SQL語句到后台, 為了實現同步更新,
 
 DBExpress中的ClientDataSet.applyupdates()能否根據需要控制它成功時不自動清除Delta,由外部程序清除,
 或有其它實現以上意圖的好方法?
   
   多謝!!!