HINWEIS
Der Aufruf aus einem VBA-Programm:
Dim cmd As New ADODB.Command
Dim param1 As ADODB.Parameter
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Test"
cmd.ActiveConnection = CurrentProject.Connection
cmd.Parameters.Append cmd.CreateParameter("Return", adInteger, adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("Nachname", adBSTR, adParamInput, 50, "A%")
cmd.Execute
Debug.Print cmd(0)
Meist wird der Rückgabewert im Zusammenhang mit der Fehlerbehandlung verwendet. Rückgabewerte kleiner
null werden als Error-Codes interpretiert.
Programmieren von Triggern
Als VBA-Programmierer sind Sie es gewohnt, mit Event-Prozeduren auf bestimmte Ereignisse zu reagieren.
Einen ähnlichen Mechanismus stellen die Trigger dar. Ein Trigger wird gestartet, wenn Daten in Tabellen
geändert werden, d.h. die Anweisung INSERT, UPDATE oder DELETE aufgerufen werden.
Trigger werden wie Stored Procedures auf dem SQL Server gespeichert und ausgeführt. Innerhalb eines
Triggers, der mit TSQL programmiert wird, können Sie zum Beispiel andere Tabellen bearbeiten, Daten auf
Einhaltung bestimmter Regeln überprüfen oder Aktionen rückgängig machen. Die gesamte Routine läuft in
einer eigenen Transaktion ab, auftretende Fehler führen automatisch zu einem Rollback.
Obwohl vielfach die Meinung vertreten wird, Einschränkungen, Standardwerte und Regeln statt eines Trig-
gers einzusetzen, empfehlen die Autoren gerade dem Access-Programmierer den Einsatz von Triggern, da
es hier wesentlich effektivere Mechanismen gibt, Fehlercodes oder Meldungen an das Client-Programm zu-
rückzugeben. Eine Meldung wie in der folgenden Abbildung werden Sie wohl keinem User zumuten
wollen.
Abbildung 10.28 Fehlermeldung einer Check-Klausel
Trigger in Access erzeugen
Durchsuchen Sie die Access-Oberfläche nach der Möglichkeit, einen Trigger zu erzeugen, werden Sie wahr-
scheinlich zunächst nichts finden. Gut versteckt findet sich im Kontextmenü des Navigationsbereichs
(rechte Maustaste) die gewünschte Funktion.
643
Praktisches Arbeiten mit dem SQL Server
Kapitel 10: SQL Server
Abbildung 10.29 Trigger mit Access erzeugen
Nachdem Sie im Dialog auf die Schaltfläche »Neu« geklickt haben, erhalten Sie einen ersten Prozedur-
Rumpf, den Sie mit Leben erfüllen können:
Abbildung 10.30 Trigger in Access bearbeiten
Kommen wir nun zu den Einzelheiten.
Trigger-Arten
Wie schon erwähnt, können Sie Trigger für drei verschiedene Ereignistypen einsetzen:
Update
Insert
Delete
Worauf Sie mit Ihrem Trigger reagieren, entscheiden Sie innerhalb der Trigger-Routine durch die Angabe
der entsprechenden Schlüsselwörter.
Beim Erstellen eines Triggers müssen Sie Folgendes angeben:
Einen Namen.
Den Namen der Tabelle, für die der Trigger definiert wird.
Die Anweisungen, die den Trigger aktivieren (INSERT, UPDATE oder DELETE).
Die eigentliche Programmlogik.
Die Syntax (vereinfacht):
CREATE TRIGGER <Triggername>
ON <Tabellenname>
[WITH ENCRYPTION]
644
BEISPIEL
HINWEIS
{ {FOR { [DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
<Anweisungen> }
Langsam haben Sie es satt, dass Sie als Systemadministrator weniger verdienen als die meisten anderen Mit-
arbeiter. Aus diesem Grund legen Sie eine maximale Gehaltsgrenze für alle Mitarbeiter fest. Dazu brauchen
Sie nicht unbedingt die ganzen Client-Anwendungen anzupassen. Es genügt, wenn Sie auf dem Server einen
Einfüge- bzw. Update-Trigger bereitstellen:
Alter Trigger Personen_Trigger1 On dbo.Personen
FOR INSERT, UPDATE
AS
DECLARE @neuesgehalt money
SELECT @neuesgehalt = i.gehalt
FROM inserted I
IF (@neuesgehalt > 5000)
BEGIN
RAISERROR ('Sind Sie sicher? Schade um das Geld!',16,-1)
ROLLBACK TRANSACTION
END
Gezielte Datensatzauswertung
Vielleicht haben Sie sich schon gefragt, wie man feststellen kann, welche Datensätze von einem UPDATE,
INSERT oder DELETE betroffen sind. Zu diesem Zweck stellt der SQL Server innerhalb der Trigger-Rou-
tine zwei zusätzliche temporäre Tabellen zur Verfügung:
Tabelle inserted
Tabelle deleted
Diese Tabellen weisen das gleiche Layout auf wie die Tabelle, die den Trigger auslöst. Der Inhalt hängt von
der jeweiligen Operation ab:
Operation Tabelleninhalt
INSERT Die Tabelle inserted enthält die neuen Datensätze, die Tabelle deleted ist nicht definiert
UPDATE Die Tabelle deleted enthält die Datensätze, die überschrieben werden sollen (alte Werte), die Tabelle inserted die
neuen Werte
DELETE Die Tabelle deleted enthält alle zu löschenden Datensätze, die Tabelle inserted ist nicht definiert
Tabelle 10.2 Inhalt der virtuellen Tabellen
Beachten Sie, dass Trigger nur einmal pro T-SQL-Anweisung aufgerufen werden, d.h., die Tabellen inserted
und deleted können mehr als einen Datensatz enthalten. Müssen Sie spezifische Auswertungen realisieren, kommen Sie um
eine Cursor-Programmierung (T-SQL) auf dem Server nicht herum. Arbeiten Sie mit CLR-Assemblies müssen Sie ebenfalls alle
Datensätze z.B. mit einem DataReader verarbeiten.
645
Praktisches Arbeiten mit dem SQL Server

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.