Logowanie
Nadaj nowe hasło
Jeśli jesteś już klientem to wprowadź swój adres e-mail i potwierdź hasłem. Logowanie umożliwia zakup nowych programów po cenach promocyjnych, rozszerzenie posiadanego oprogramowania, zamówienie abonamentu na aktualizacje oraz konsultacje serwisowe.
Nie masz konta?Zarejestruj się
|
Wyzwalacze służą do wykonywania jakiejś akcji podczas tworzenia, modyfikowania lub usuwania rekordów dowolnej tabeli. Może to być np. polecenie SQL typu UPDATE, INSERT bądź DELETE, wywołanie procedury składowanej lub tylko pokazanie dowolnego komunikatu.
W celu utworzenia własnego wyzwalacza wybieramy z menu Ustawienia pozycję Wyzwalacze użytkownika.
Dla nowego wyzwalacza określamy:
Tabela - nazwa tabeli w aplikacji, na której będzie działać wyzwalacz użytkownika (patrz Lista modułów danych i tabel)
Wyzwalacz - moment uruchomienia wyzwalacza:
BeforeInsert - przed utworzeniem nowego rekordu
AfterInsert - po utworzeniu nowego rekordu
BeforeEdit - przed edycją istniejącego rekordu
AfterEdit - po edycji istniejącego rekordu
BeforePost - przed zatwierdzeniem zmian nowego lub istniejącego rekordu, uruchamiany tylko gdy jest widoczny interfejs użytkownika
AlwaysBeforePost - przed zatwierdzeniem zmian nowego lub istniejącego rekordu, uruchamiany zawsze
AfterPost - po zatwierdzeniu zmian nowego lub istniejącego rekordu, uruchamiany tylko gdy jest widoczny interfejs użytkownika
AlwaysAfterPost - po zatwierdzeniu zmian nowego lub istniejącego rekordu, uruchamiany zawsze
BeforeDelete - przed kasowaniem rekordu
AfterDelete - po kasowaniu rekordu
OnChangeField - gdy wartość jakiegoś pola w rekordzie (kontrolki) została zmieniona
Wszystkie rodzaje wyzwalaczy za wyjątkiem Always... są uruchamiane tylko wtedy, gdy jest widoczny interfejs użytkownika (tzn. jest widoczne okno - i tam wprowadzamy dane)
Typ - typ wyzwalacza:
Akcja - zostanie wykonanie polecenie SQL podane w Definicji
Akcja warunkowa - po zatwierdzeniu komunikatu na 'Tak', zostanie wykonanie polecenie SQL podane w Definicji
Komunikat (Info) - zostanie wywołany komunikat typu 'Info', jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord
Komunikat (Ostrzeżenie) - zostanie wywołany komunikat typu 'Ostrzeżenie', jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord
Błąd - zostanie wywołany komunikat błędu, jeśli zapytanie SQL podane w Definicji zwróci choć jeden rekord, a dalsza akcja zostanie przerwana
Warunek -
Definicja - definicja zapytania lub polecenia SQL. Wartości pól aktualnego rekordu można pobrać używając nawiasów klamrowych, np. {X_I} oznacza wartość pola X_I bieżącego rekordu; np. UPDATE PRACOWNK SET [PESEL]={PESEL} WHERE [X_I]={X_IPracownik} wykonane na zdarzeniu AfterPost tabeli DANE PERSONALNE uaktualni pole PESEL w tabeli PRACOWNICY. Można odwoływać się także do pól z innych tabel w następujący sposób {NAZWA_TABELI_W_APLIKACJI.Pole}; np. {PRACOWNICY.X_I} (UWAGA! nie mylić nazwy tabeli w bazie z nazwą tabeli w aplikacji; lista tabel jest dostępna tutaj Lista modułów danych i tabel). Dwuklik myszy na tym polu powoduje otwarcie okna wygodnego edytora zapytań SQL.
Komunikat - treść komunikatu
Aktywny - czy wyzwalacz ma działać
UWAGA 1
Aby wykonać wyzwalaczem wiele poleceń SQL za jadnym razem, należy w definicji użyć klauzuli go, która rozdziela zapytania SQL; np:
update tabela_1 set [pole_1]=1
go
update tabela_2 set [pole_1]=1
go
UWAGA 2
Ponieważ wyzwalacz OnChangeField jest wyzwalany zawsze, gdy wartość dowolnego pola w rekordzie (kontrolki) została zmieniona, przy dużej ilości pól w tabeli będzie on wykonywany wielokrotnie, co może spowolnić działanie programu. Aby tego uniknąć można w definicji wyzwalacza zastosować klauzulę onchange={nazwa_pola_1},{nazwa_pola_1},...,{nazwa_pola_n}, wtedy będzie on wyzwalany tylko przy zmianie wartości pól wymienionych w klauzuli.
UWAGA 3
Jeśli chcemy wykryć, czy tabela jest w danej chwili w trybie Insert (nowy rekord został dostawiony); np. w AfterPost chcemy aby wyzwalacz inaczej zachowywał się przy wstawieniu rekordu niż przy edycji, można użyć zmiennej specjalnej <INS>, która zwraca wtedy True; np:
if <INS> begin
zrób coś, bo wstawiono nowy rekord
end
else begin
zrób coś, bo istniejący rekord został zmieniony
end
UWAGA 4
Jeśli po usunięciu rekordu w AfterDelete chcemy zmodyfikować jakieś powiązania skasowanego rekordu z innymi tabelami (np.usunąć z nich jego Ide), to można wykorzystać zmienną specjalną <DEL_IDE>, która zwraca identyfikator usuniętego rekordu; np:
update TABELA set [X_IRec]=0 where [X_IRec]=<DEL_IDE>