我是初學Delphi, 在使用數據庫事務時,出現一些問題,
后端數據庫為SQL SERVER200, 使用的DELPHI自帶的DBExpress數據庫組件(SQLConnection, SQLDataSet, ClientDataSet, DataSetProvider),
SQLDataSet的SQL為 select * from authors, 執行更新的代碼如下:
 
procedure TForm1.Button1Click(Sender: TObject);
var
 TrsDsc1:TTransactionDesc;
begin
  trsDsc1.TransactionID := 1;
  TrsDsc1.IsolationLevel := xilREADCOMMITTED;  DataModule2.con1.StartTransaction(TrsDsc1);
  try
    DataModule2.cdsMain1.ApplyUpdates(0);
    DataModule2.con1.Commit(TrsDsc1);
  except
    on E:Exception do
        DataModule2.con1.Rollback(TrsDsc1);
  end;
end;
 
問題:
 1.當將數據中兩條記錄的編號(主鍵必須唯一)改為一樣, 然后按Button1修改后台數據(SQL服務返回錯誤,DEBUG時會出現
運行EXE文件不出現). 程序并沒進入Exception段中執行con1.Rollback(TrsDsc1), 而是繼續執行con1.Commit(TrsDsc1),
為什么呢?
 2. 對于兩表更新數據要求兩表都成功時才同時Commit﹐其中任何一個失敗則同時Rollback, 怎樣控制?
 3. 對于更新后台數據出錯, ClientDataSet中的事件OnReconcileError與SqlConnection中的Transaction事件如何配合起來使用?
 
  多謝!!!