Delphi 德尔福+;FireDAC在ApplyUpdate上获取数据库错误
在内存中使用FireDAC(CachedUpdates),我很难找到正确的方法来获取Delphi 德尔福+;FireDAC在ApplyUpdate上获取数据库错误,delphi,transactions,firebird,master-detail,firedac,Delphi,Transactions,Firebird,Master Detail,Firedac,在内存中使用FireDAC(CachedUpdates),我很难找到正确的方法来获取ApplyUpdate方法上的错误 以下是我的场景,一个主-细节关系,由以下因素构成: 1TFD连接 2TFDQuery 2TDataSource 1TFDSchemaAdapter 这两个查询都设置为CachedUpdates,并链接到FDSchemaAdapter。 FDQuery2(详细信息)通过MasterSource属性与主机链接主字段和索引字段名称设置为“idMaster”。属性FetchOpti
ApplyUpdate
方法上的错误
以下是我的场景,一个主-细节关系,由以下因素构成:
- 1
TFD连接
- 2
TFDQuery
- 2
TDataSource
- 1
TFDSchemaAdapter
CachedUpdates
,并链接到FDSchemaAdapter
。
FDQuery2
(详细信息)通过MasterSource
属性与主机链接<代码>主字段和索引字段名称
设置为“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作为状态:
ApplyUpdate返回遇到的错误数。基于
已成功应用此返回值和Amaxerror设置
将从集中式更改日志中删除更新。如果更新
在应用所有更新之前中止进程,任何未应用的更新
更新仍保留在更改日志中
ApplyUpdate不会引发
例外。相反,应用程序应该检查错误的记录
使用Reconcide和OnReconcileRow事件处理程序或
每个数据集的FilterChanges和RowError属性。更多
详细信息,请阅读缓存更新时的“查看错误”
所以。。。您不应该期望出现异常,但您应该检查ApplyPDates返回的值,以确定是否可以提交或处理错误。可能是在某个地方捕获和沉默异常。要找到答案:确保在“工具|选项|调试器选项”下选中了“语言异常通知”,并在“项目|选项”下选中了“使用调试DCU”。将应用程序运行到您期望发生异常的位置,并查看调试器是否中断执行。如果是,请使用View | Debug windows |调用堆栈来定位它。@MartynA只有在调试模式下才会触发ApplyUpdate异常。我已经尝试过使用OnReconcienceError事件,但没有成功当我使用ClientDataSet时,仅使用OnReconcienceError事件就足以捕获错误消息。顺便说一句,FireDAC并没有那么简单,因为我已经尝试使用FDSchemaAdapter.Reconcile和OnReconcileRow,但到目前为止没有成功:-(