我是初學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事件如何配合起來使用?
多謝!!!
后端數據庫為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事件如何配合起來使用?
多謝!!!
insert, update, delete三個不同的過程?