[英]Delphi + FireDAC Get database errors on ApplyUpdates
我在使用內存中的FireDAC(CachedUpdates)時,很難找到在ApplyUpdates
方法上獲取錯誤的正確方法。
這是我的場景,一個主 - 細節關系,復合:
TFDConnection
TFDQuery
TDataSource
TFDSchemaAdapter
兩個查詢都設置為CachedUpdates
並鏈接到FDSchemaAdapter
。 FDQuery2
(詳細信息)通過MasterSource
屬性與master鏈接。 MasterFields
和IndexFieldNames
被設置為“idMaster”。 還檢查屬性FetchOptions.DetailCascade
。
我還有一個按鈕來執行申請:
try
FDConnection1.StartTransaction;
FDSchemaAdapter1.ApplyUpdates(0);
FDQuery1.CommitUpdates;
FDQuery2.CommitUpdates;
FDConnection1.Commit;
except on E: Exception do
begin
FDConnection1.Rollback;
raise Exception.CreateFmt('Something went wrong. Error: %s', [E.Message]);
end;
end;
到目前為止一切正常。
當我的數據庫拋出異常,例如違反約束時,會發生此問題。 例外不是提高。 因此,我的交易不會“回滾”。
ps:我正在使用Delphi XE7和Firebird 2.5
正如文件所述:
ApplyUpdates返回遇到的錯誤數。 根據此返回值和成功設置AMaxErrors,將從集中更改日志中刪除已應用的更新。 如果在應用所有更新之前中止更新過程,則任何未應用的更新都將保留在更改日志中。
ApplyUpdates不會引發異常。 相反,應用程序應使用Reconcile和OnReconcileRow事件處理程序或每個數據集的FilterChanges和RowError屬性來查看錯誤記錄。 有關更多詳細信息,請閱讀“緩存更新”中的“查看錯誤”。
所以...你不應該期待一個異常,但是你應該檢查ApplyUpdates返回的值來決定你是否可以提交或處理錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.