2017-11-28 19 views
0

私はマスターディテール関係の2つのFDQueryを持っています。 'Master'のAfterInsertイベントでは、Appendを詳細に作成し、OnBeforePost( 'master'のもの)イベントで 'Master'フィールドを検証した後にのみ 'Detail'の 'Post'を呼び出します。しかし、FireDacは 'Detail'に変更がない場合、 'Detail'に 'Cancel'を実行するので、この順番でこれを行うことはできません。動きがある場合、自動的に「投稿」を実行します。これはBeforePostイベントが実行される前に発生します。これは、このイベント中にDetailがすでに 'dsBrowse'モードにあるためです。 誰でもこの状況を回避するのに役立つでしょうか? つまりfiredacがレコード詳細で投稿/キャンセルを実行するのを防ぐ方法は? *注:私は、Delphi XE5詳細レコードのfiredac投稿やキャンセルを防ぐには?

+0

これはマスター/ディテールなので、新しく追加するレコードが結合されるように、まず結合フィールドの値を設定しますか?そうでない場合は、あなたの状況に関係しなくなったため、詳細がキャンセルされているように見えます。あなたは、あなたのビジュアルコントロールなどを見ることができるように、コードと多分あなたのフォームの写真を投稿するべきです。 –

答えて

0

に回避策を使用していますがBeforePostイベントを前に実行させ、継承されたTFDQueryコンポーネントを作成し、PostBeforePostイベントを上書きした後(驚くべきではありません?)。

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; 
関連する問題