目前用FIREDAC開發,但發現一個重大問題,無法解決,求大牛指點:
也就是:在事務處理時,無法捕捉到FIREDAC的例外,導致主表和明細表更新資料時,事務無效
以前用UNIDAC就可以捕捉到例外代碼段,并執行事務回滾,但FIREDAC,死活執行不了例外代碼段,
一直按照正常順序執行,快瘋了,不知道誰用FIREDAC處理過事務例外處理,請指教呀。
代碼如下:
try
//啟動事務
datamodform.DBCONN.StartTransaction;
qry_purpo3.ApplyUpdates();
qry_detail.ApplyUpdates();
qry_master.ApplyUpdates();
//無錯誤時,正式提交所有修改
datamodform.DBCONN.Commit;
qry_purpo3.CommitUpdates;
qry_detail.CommitUpdates;
qry_master.CommitUpdates;
//保存后,置資料為只讀狀態
set_query_status(qry_master,'R');
set_query_status(qry_detail,'R');
set_query_status(qry_purpo3,'R');
application.MessageBox(pchar('保存完成!'),'資訊',MB_ICONINFORMATION+MB_OK);
except on e: Exception do
begin
//發生錯誤時,回滾所有修改的資料
if datamodform.DBCONN.InTransaction then
datamodform.DBCONN.RollBack;
application.MessageBox(pchar('保存資料時發生錯誤!'+#13#10+e.message),
'錯誤', MB_ICONERROR+mb_ok);
end;
end;
uj5u.com熱心網友回復:
begin
datamodform.DBCONN.StartTransaction;
try
qry_purpo3.ApplyUpdates();
qry_detail.ApplyUpdates();
qry_master.ApplyUpdates();
qry_purpo3.CommitUpdates;
qry_detail.CommitUpdates;
qry_master.CommitUpdates;
//保存后,置資料為只讀狀態
set_query_status(qry_master,'R');
set_query_status(qry_detail,'R');
set_query_status(qry_purpo3,'R');
application.MessageBox(pchar('保存完成!'),'資訊',MB_ICONINFORMATION+MB_OK);
datamodform.DBCONN.Commit;
except
application.MessageBox(pchar('保存資料時發生錯誤!'+#13#10+e.message), '錯誤', MB_ICONERROR+mb_ok);
datamodform.DBCONN.Rollback;
end;
end;
uj5u.com熱心網友回復:
begin
datamodform.DBCONN.StartTransaction;
try
qry_purpo3.ApplyUpdates();
qry_detail.ApplyUpdates();
qry_master.ApplyUpdates();
//保存后,置資料為只讀狀態
set_query_status(qry_master,'R');
set_query_status(qry_detail,'R');
set_query_status(qry_purpo3,'R');
application.MessageBox(pchar('保存完成!'),'資訊',MB_ICONINFORMATION+MB_OK);
datamodform.DBCONN.Commit;
except
application.MessageBox(pchar('保存資料時發生錯誤!'+#13#10+e.message), '錯誤', MB_ICONERROR+mb_ok);
datamodform.DBCONN.Rollback;
end;
end;
uj5u.com熱心網友回復:
另外,你的代碼寫在哪里?如果寫在 ApplicationEvents 的 onException 事件中,請檢查代碼與 onException 事件是否有關聯。uj5u.com熱心網友回復:
這個 要看你的 更新陳述句是怎么寫的,寫在哪里? 如果是 TFD**.ExecSQl(' Update(sql陳述句)..... '),它是在 資料庫里執行的,delphi連接事務,是回應不到錯誤的uj5u.com熱心網友回復:
是能 通過 資料庫事件查看錯誤捕獲轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/22577.html
標籤:數據庫相關
