[英]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.