2017-11-28 3 views
0

마스터 - 세부 관계가있는 두 개의 FDQuery가 있습니다. '마스터'의 AfterInsert 이벤트에서 세부 사항을 추가하고 OnBeforePost ('마스터'라고도 함) 이벤트에서 '마스터'필드의 유효성을 확인한 후에 만 ​​'세부 사항'의 '게시'를 호출합니다. 그러나 FireDac은 'Detail'에 변경 사항이 없으면 'Detail'에서 'Cancel'을 실행하므로이 순서대로 수행 할 수 없습니다. 동작이 있으면 자동으로 '게시'를 실행합니다. 이 이벤트 동안 Detail이 이미 'dsBrowse'모드에 있기 때문에 BeforePost 이벤트가 실행되기 전에 발생합니다. 누구든지 나를 도울 수 있습니까? 즉 firedac이 기록 세부 정보에서 게시/취소를 실행하는 것을 방지하는 방법은 무엇입니까? * 참고 : 나는 (? 놀라운되지 않음) 게시하기 전에 실행하기 위해 BeforePost 이벤트가 발생, 델파이 XE5세부 레코드에 firedac 게시 또는 취소를 방지하는 방법은 무엇입니까?

+0

이것은 마스터/세부 정보이므로 새로 추가하는 레코드가 조인되도록 조인 필드 값을 먼저 설정합니까? 그렇지 않은 경우 세부 정보가 더 이상 상황과 관련이 없기 때문에 취소되는 것처럼 들립니다. 비주얼 컨트롤 등을 볼 수 있도록 코드와 폼의 그림을 게시해야합니다. –

답변

0

이 해결 방법은 상속 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; 
관련 문제