Witajcie,
Postanowiłem pobawić się nieco notyfikacjami z bazy i przyznam szczerze, że działają wzorcowo .. do czasu. Może to wina moja, że nie umiem poprawnie tego używać ale liczę, że mi pomożecie. Przykładowy kod:
type
TMyClass= class(TForm)
...
strict private
FAD: TADEventAlerter;
procedure aeAlert(ASender: TADCustomEventAlerter; const AEventName: string;
const AArgument: Variant);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy(); override;
end;
procedure TMyClass.aeAlert(ASender: TADCustomEventAlerter;
const AEventName: string; const AArgument: Variant);
begin
inherited;
if AEventName = 'addthb_event' then
begin
qTHB.Close;
qTHB.Open();
end;
end;
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAD := TADEventAlerter.Create(Self);
FAD.connection := TKBSDDBDM.Instance.db;
FAD.OnAlert := aeAlert;
FAD.Names.add('addthb_event');
FAD.Active := True;
end;
destructor TMyClass.Destroy;
begin
FAD.Free();
inherited;
end;
poprawnie reaguje na zdarzenia. Niestety w przypadku drugiej i kolejnej formatki (każda ma swój FAD) przy zamykaniu całej aplikacji dzieją się "cuda". Czasami zamyka się poprawnie, czasami leci wyjątek z którejś (nie zawsze tej samej klasy) od firedac ale przeważnie wisi na zamknięciu wątków i finalnie się nie zamyka. Dlaczego napisałem druga i kolejna formatka? Bo w tej chwili mam okolo 8 różnych modułów opartych o eventy z bazy i wyjątki latają z wielu różnych formatek. Wystarczyło, że wyłączyłem
FAD.Active := False;
powiadomienia i problem się rozwiązał zatem zdecydowanie problem leży po stronie tegoż komponentu. Możecie coś podpowiedzieć?