簡體   English   中英

Delphi + FireDAC在ApplyUpdates上獲取數據庫錯誤

[英]Delphi + FireDAC Get database errors on ApplyUpdates

我在使用內存中的FireDAC(CachedUpdates)時,很難找到在ApplyUpdates方法上獲取錯誤的正確方法。

這是我的場景,一個主 - 細節關系,復合:

  • 1 TFDConnection
  • 2 TFDQuery
  • 2 TDataSource
  • 1 TFDSchemaAdapter

兩個查詢都設置為CachedUpdates並鏈接到FDSchemaAdapter FDQuery2 (詳細信息)通過MasterSource屬性與master鏈接。 MasterFieldsIndexFieldNames被設置為“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM