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;