繁体   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