如何防止炒作或取消详细记录?

时间:2017-11-28 19:42:05

标签: database delphi firedac

我有两个具有主 - 细节关系的FDQuery。在'Master'的AfterInsert事件中,我详细地附加了一个Append,在事件OnBeforePost(也是'master')中,我只在验证'Master'字段后才调用'Detail'的'Post'。但是,我无法按此顺序执行此操作,因为如果“详细信息”中没有任何更改,FireDac会在“详细信息”中执行“取消”。如果有动作,它会自动执行“发布”。这在BeforePost事件执行之前发生,因为在此事件期间Detail已处于'dsBrowse'模式。 谁能帮助我解决这种情况? 即如何防止fedac在记录详细信息上执行发布/取消? *注意:我正在使用Delphi XE5

1 个答案:

答案 0 :(得分:1)

解决方法是创建一个继承的TFDQuery组件并覆盖PostBeforePost事件,导致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;