我有两个具有主从关系的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组件并覆盖PostBeforePost事件,从而使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/

10-12 03:16