CREATE TRIGGER-Befehl
Erstellt für eine Tabelle einen DELETE-, INSERT- oder UPDATE-Trigger.
CREATE TRIGGER ON TableName FOR DELETE | INSERT |
UPDATE AS lExpression
Parameter
TableName
Gibt die Tabelle der aktuellen Datenbank an, für die Sie einen Trigger erstellen möchten.FOR DELETE | INSERT | UPDATE
Gibt an, welcher Trigger-Typ von Visual FoxPro erstellt wird.Wenn bereits ein Trigger des von Ihnen angegebenen Typs vorhanden ist und SET SAFETY auf ON gesetzt ist, werden Sie von Visual FoxPro gefragt, ob Sie den vorhandenen Trigger überschreiben möchten. Wenn SET SAFETY auf OFF gesetzt ist, wird der vorhandene Trigger automatisch überschrieben.
AS lExpression
Gibt den logischen Ausdruck an, der ausgewertet wird, wenn der Trigger ausgelöst wird. lExpression kann eine benutzerdefinierte Funktion oder eine gespeicherte Prozedur sein, die einen logischen Wert zurückgibt. Gespeicherte Prozeduren werden für eine Tabelle mit MODIFY PROCEDURE erstellt.Mittels AERROR( ) können benutzerdefinierte Funktionen und gespeicherte Prozeduren den Namen der Tabelle feststellen, für die ein Trigger ausgelöst wurde. Auch die Art des Triggers ist so feststellbar.
Wenn die Auswertung von lExpression den Wert Wahr (.T.) ergibt, wird der Befehl oder das Ereignis, der bzw. das den Trigger ausgelöst hat, ausgeführt.
Ergibt die Auswertung von lExpression den Wert Falsch (.F.), wird der Befehl oder das Ereignis, der bzw. das den Trigger ausgelöst hat, nicht ausgeführt. Ist eine ON ERROR-Prozedur in Kraft, wird anstelle des Befehls oder Ereignisses die ON ERROR-Prozedur ausgeführt. Ist keine ON ERROR-Prozedur in Kraft, wird der Befehl oder das Ereignis nicht ausgeführt, und Visual FoxPro zeigt eine Fehlermeldung an.
Hinweise
Mit CREATE TRIGGER können Sie Ereignisse abfangen, durch die Datensätze einer Tabelle gelöscht, hinzugefügt oder geändert werden. DELETE-, INSERT- oder UPDATE-Trigger können nur für eine Tabelle erstellt werden, die zu einer Datenbank hinzugefügt wurde. Erstellen Sie mit CREATE DATABASE eine Datenbank, und fügen Sie mit ADD TABLE Tabellen zu dieser Datenbank hinzu.
Nachstehend sind die Befehle und Ereignisse aufgeführt, die einen DELETE-, INSERT- oder UPDATE-Trigger auslösen:
DELETE-Trigger
- DELETE wird eingegeben.
- Vom Menü Tabelle eines Datenblatt- oder eines Bearbeitungsfensters aus wird ein Datensatz zum Löschen markiert.
- Beachten Sie, dass eine unwiderrufliche Löschung (ZAP) nicht zum Auftreten des DELETE-Triggers führt.
INSERT-Trigger
- APPEND FROM wird eingegeben.
- APPEND FROM ARRAY wird eingegeben.
- APPEND BLANK wird eingegeben.
- Ein Datensatz wird in einem Datenblatt- oder Bearbeitungsfenster über das Menü Tabelle angefügt.
- IMPORT wird eingegeben.
- INSERT – SQL wird eingegeben.
- RECALL wird eingegeben.
- Ein Datensatz wird in einem Datenblatt- oder Bearbeitungsfenster über das Menü Tabelle wiederhergestellt.
UPDATE-Trigger
- GATHER wird eingegeben.
- REPLACE wird eingegeben.
- REPLACE FROM ARRAY wird eingegeben.
- UPDATE - SQL wird eingegeben.
- Ein Datensatz wird durch ein anderes Ereignis geändert, z. B. wenn durch ein Formular der Inhalt eines Feldes geändert wird.
Für mit CREATE TRIGGER erstellte Trigger gelten die folgenden Regeln:
- INSERT kann nicht auf eine Tabelle mit einem Trigger angewendet werden. Verwenden Sie stattdessen INSERT - SQL.
- Ein eingegebener PACK-Befehl löst keinen Trigger aus.
- Ein eingegebener ZAP-Befehl löst keinen Trigger aus.
- Es wird kein Trigger ausgelöst, wenn Sie einen Datensatz aktualisieren, der zum Löschen markiert ist.
- Je nach dem aktuellen Pufferungsmodus wird ein Trigger nicht sofort ausgelöst:
Wenn die Tabellenpufferung (Zwischenspeicherung) aktiviert ist, wird der UPDATE-Trigger ausgelöst, wenn TABLEUPDATE( ) eingegeben wird und alle zwischengespeicherten Datensätze in der Tabelle aktualisiert werden.
Beispiel
Im folgenden Beispiel wird ein UPDATE-Trigger erstellt, der verhindert, dass im Feld maxordamt
der Tabelle customer
Werte größer als 50 eingegeben werden. Bei Ausführung des ersten REPLACE-Befehls wird eine Fehlermeldung generiert, da der Wert des Feldes maxordamt
größer als 50 ist. Der zweite REPLACE-Befehl hingegen generiert keinen Fehler, da der Wert des Feldes maxordamt
kleiner oder gleich 50 ist.
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && Open customer table
* Set trigger on maxordamt field to fail with values <= 50
CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50
ON ERROR && Restore the system error handler
WAIT WINDOW "Press a key to test trigger with value of 60"+CHR(13);
+"When you get the error message, press Ignore."
REPLACE maxordamt WITH 60 && Displays an error message
? maxordamt
WAIT WINDOW "Press a key to test with value of 50."
REPLACE maxordamt WITH 50 && Value is accepted
? maxordamt
DELETE TRIGGER ON customer FOR UPDATE && Remove the trigger
Siehe auch
ADD TABLE | AERROR( ) | CREATE DATABASE | DELETE TRIGGER | DISPLAY DATABASE | LIST DATABASE | OPEN DATABASE