我有两个具有主从关系的fdquery。在“master”的afterinsert事件中,我进行了一个详细的追加;在onbeforepost(也是“master”)事件中,我仅在验证“master”字段后调用“detail”的“post”。但是,我无法按此顺序执行此操作,因为如果firedac在“detail”中没有任何更改,它将在“detail”中执行“cancel”。如果有动作,它会自动执行“post”。这在执行beforepost事件之前发生,因为在此事件期间详细信息已处于“dsbrowse”模式。
有人能帮我解决这个问题吗?ie如何防止firedac执行post/cancel on record detail?
*注意:我使用的是Delphi XE5
最佳答案
一种解决方法是生成继承的TFDQuery
组件并覆盖Post
和BeforePost
事件,从而使beforepost事件在之前运行(并不令人惊讶?)邮政。
type
TMyFDQuery = class(TFDQuery)
InheritedPost: boolean; // Avoid Duplicate BeforePost Execution
...
protected
procedure DoBeforePost; override;
procedure Post; override;
...
procedure TMyFDQuery.DoBeforePost;
begin
if not InheritedPost then
inherited;
end;
procedure TMyFDQuery.Post;
begin
DoBeforePost;
try
InheritedPost := True;
inherited;
finally
InheritedPost := False;
end;
end;
关于database - 如何防止firedac发布或取消详细记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47539662/