我有两个具有主 - 细节关系的FDQuery。在'Master'的AfterInsert事件中,我详细地附加了一个Append,在事件OnBeforePost(也是'master')中,我只在验证'Master'字段后才调用'Detail'的'Post'。但是,我无法按此顺序执行此操作,因为如果“详细信息”中没有任何更改,FireDac会在“详细信息”中执行“取消”。如果有动作,它会自动执行“发布”。这在BeforePost事件执行之前发生,因为在此事件期间Detail已处于'dsBrowse'模式。 谁能帮助我解决这种情况? 即如何防止fedac在记录详细信息上执行发布/取消? *注意:我正在使用Delphi XE5
答案 0 :(得分:1)
解决方法是创建一个继承的TFDQuery
组件并覆盖Post
和BeforePost
事件,导致BeforePost事件之前运行(不是很惊人?)Post。
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;