Home » Tutorials » Datenbanken » SQLite3 mit Delphi und dbExpress
SQLite3 mit Delphi und dbExpress
Trigger
Ein Trigger ist ein Ereignis, das ausgeführt wird, wenn in der Datenbank eine bestimmte Aktion (wie zum Beispiel SQL-Befehl Insert, Update, Delete) durchgeführt wird.
CREATE TRIGGER Name AFTER Aktion ON Tabelle BEGIN Ereignis; END
Beispiel-Aufgabe:
Alle Änderungen der Tabelle Buecher mit den SQL-Befehlen INSERT, UPDATE oder DELETE,in eine Tabelle Log schreiben.
Das Änderungsdatum und das Buch, das geändert wurde, sollen gespeichert („gelogged“) werden.
Tabelle Log erstellen
SQL-Befehle als Konstanten definieren:
Const CSQLDROPTABLELOG = 'DROP TABLE IF EXISTS Log;'; CSQLCREATETABLELOG = 'CREATE TABLE Log (' + 'LogID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Datum VARCHAR(20), Info VARCHAR(255));';
In eine Prozedur, z.B. FormCreate die Tabelle Log neu erstellen:
SQLConnection.ExecuteDirect(CSQLDROPTABLELOG); SQLConnection.ExecuteDirect(CSQLCREATETABLELOG);
Trigger erstellen
SQL-Befehle als Konstanten definieren:
Const CR = #13#10; CSQLDROPTRIGGERBI = 'DROP TRIGGER IF EXISTS Buecher_I;'; CSQLCREATETRIGGERBI = 'CREATE TRIGGER Buecher_I AFTER INSERT ON Buecher ' + CR + 'BEGIN' + CR + ' INSERT INTO Log(Datum, Info) ' + CR + ' VALUES (DATETIME(''now''), ''Neu: '' || new.Titel);' + CR + 'END;'; CSQLDROPTRIGGERBU = 'DROP TRIGGER IF EXISTS Buecher_U;'; CSQLCREATETRIGGERBU = 'CREATE TRIGGER Buecher_U AFTER UPDATE ON Buecher ' + CR + 'BEGIN' + CR + ' INSERT INTO Log(Datum, Info) ' + CR + ' VALUES (DATETIME(''now''), ''Geändert: '' || old.Titel || '' auf '' || new.Titel);'+ CR + 'END;'; CSQLDROPTRIGGERBD = 'DROP TRIGGER IF EXISTS Buecher_D;'; CSQLCREATETRIGGERBD = 'CREATE TRIGGER Buecher_D AFTER DELETE ON Buecher ' + CR + 'BEGIN' + CR + ' INSERT INTO Log(Datum, Info) ' + CR + ' VALUES (DATETIME(''now''), ''Gelöscht: '' || old.Titel);' + CR + 'END;';
In eine Prozedur, z.B. FormCreate die Trigger neu erstellen:
SQLConnection.ExecuteDirect(CSQLDROPTRIGGERBI); SQLConnection.ExecuteDirect(CSQLCREATETRIGGERBI); usw. für TRIGGERBU und TRIGGERBD.
Änderungen der Tabelle „Log“ anzeigen
SELECT * FROM Log;
Es wurde Titel hinzugefügt.
Alle Einträge der Tabelle „Log“ löschen
DELETE FROM Log;