|
![]() | TSQL602EventAction | ![]() | TSQL602EventAction |
Zjednodušená deklarace třídy:
type TSQL602Event = class(TPersistent) published property EventName : string; property ParamMask : string; property ParamExact : Boolean; public property Param : string; property Count : Integer; constructor Create; virtual; protected procedure AssignTo(Dest : TPersistent); override; end;
Třída popisující databázovou událost, registrovanou v TSQL602EventAction. Databázová událost popsaná třídou TSQL602Event nemá žádnou souvislost s událostmi (angl. events), jak jsou definovány a používány v programu Delphi!
Klienti 602SQL mohou být informováni o událostech, které na serveru nastávají jako důsledek činnosti ostatních klientů, například o změně v datech v určité tabulce nebo provádění určité procedury (viz Synchronizace klienta s událostmi na serveru). Objekt TSQL602Event reprezentuje popis jedné události. Událost je možné vyvolat v uložené proceduře pomocí SQL funkce Invoke_event, nebo pomocí metody InvokeEvent z třídy TSQL602Connection. Ostatní klienti (aplikace, formuláře) se o události dozví, pokud jejich komponenta TSQL602EventAction je registrována pro příjem této události.
Jméno události, může mít maximálně 31 znaků. 602SQL server registruje jednotlivé požadavky na sledování událostí specifikovaných určitým jménem a se specifikovanou hodnotou parametru události.
Maska parametrů události. 602SQL server informuje klienta pouze o událostech zadaného jména, jejichž parametr se shoduje s maskou.
Příznak určuje do jaké míry má 602SQL server porovnávat aktuální hodnotu parametru s masky. Má-li hodnotu true, bude server informovat klienta pouze o událostech, jejichž parametr se přesně shoduje s maskou včetně velikosti písmen. Má-li hodnotu false, bude server informovat klienta pouze o událostech, jejichž parametr začíná řetězcem specifikovaným v ParamMask. Pokud mají být sledovány všechny výskyty dané události bez ohledu na hodnotu parametru, je třeba nastavit ParamMask na prázdný řetězec a ParamExact na false.
Aktuální hodnota parametru nastalé události.
Počet výskytů události se stejným parametrem během jedné transakce, nebo během doby, kdy klient nestačil na předchozí výskyty události reagovat.
Uživatelská aplikace může definovat potomka třídy TSQL602Event. Pokud mají být přidané vlastnosti potomkovské instance doručeny proceduře, která obsluhuje výskyt události, je třeba přepsat metodu AssignTo. Implicitní implementace kopíruje do cílové instance vlastnosti Event, ParamMask, ParamExact, Param a Count.
Iniciování události:
var FirmyDetailForm: TForm2; MyEvent : TSQL602Event; ... procedure TForm2.Send602Event(DataSet: TDataSet); // AfterPost ve zdrojovém datasetu - vyvolá událost a předá jednoznačný identifikátor záznamu var id : String; begin MyEvent := TSQL602Event.Create; MyEvent.EventName := 'Event_firma'; id := DataSet.FieldValues['FIRMA']; MyEvent.Param := 'id_firmy='+id; SQL602Connection2.InvokeEvent(MyEvent); MyEvent.Free; end;
V druhém otevřeném formuláři se zachytí událost a automaticky překreslí záznam:
... SQL602EventAction1.Event.EventName := 'Event_firma'; SQL602EventAction1.DispatchToDataSets := True; SQL602EventAction1.Active := True; ... procedure TForm1.On602Event(Sender: TDataSet; Event: TSQL602Event); // je-li to událost vyvolaná editací, překresli změněný záznam datasetu // v parametru eventu je přímo podmínka určující záznam begin if AnsiStartsStr('id_firmy=',Event.Param) then begin (Sender as TSQL602DataSet).RefreshTo(Event.Param); end; end;
![]() | TSQL602EventAction | ![]() | TSQL602EventAction |