Home > Artikel > Ausgabe 12/2012 > SQL-Grundlagen: Aktionsabfragen

SQL-Grundlagen: Aktionsabfragen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wer schon etwas länger mit Access arbeitet, kennt das: Sie möchten mal eben den Wert eines Feldes für alle Datensätze ändern oder auch eine bestimmte Gruppe von Datensätzen löschen. Manuell in der Datenblattansicht ist das aber nicht zu erledigen, weil die Anzahl der Datensätze dafür zu groß ist. Dafür extra eine Aktionsabfrage erstellen und ausführen? Nein, das ist auch zuviel Aufwand. Also bleibt nur eine Möglichkeit: Sie schaffen sich einige Grundlagen zum Thema Aktionsabfragen unter SQL drauf und erledigen die genannten Aufgaben schnell vom Direktfenster aus.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1212_SQLAktionsabfragen.mdb.

Aufruf

Zum Ausführen einer Aktionsabfrage über das Direktfenster können Sie zwei verschiedene Methoden verwenden. Beide werden im Artikel Aktionsabfragen per VBA ausführlich erläutert. Im vorliegenden Artikel verwenden wir ausschließlich die Execute-Methode des mit CurrentDb gelieferten Objekts. Dies sieht, am einfachen Beispiel einer Löschabfrage, etwa so aus:

CurrentDb.Execute "DELETE FROM tblTest", dbFailOnError

Mit dieser Anweisung, abgesetzt im Direktfenster des VBA-Editors, das Sie mit der Tastenkombination Strg + G öffnen, würden Sie alle Datensätze der Tabelle tblTest löschen (siehe Bild 1). Die Execute-Anweisung erwartet die SQL-Variante der Aktionsabfrage als Parameter in Anführungszeichen. Der Wert dbFailOnError für den zweiten Parameter sorgt dafür, dass eventuell auftretenden Fehler gemeldet werden.

Absetzen einer SQL-Anweisung per Direktfenster

Bild 1: Absetzen einer SQL-Anweisung per Direktfenster

Damit Sie etwas Spaß an den Beispielen des Artikels haben, finden Sie in der Beispieldatenbank ein Formular namens frmSQLAktionsabfragen. Dort können Sie Aktionsabfragen zum Ausprobieren eingeben und auf Ausführen klicken – dies ist erstens etwas einfacher als der Weg über das Direktfenster und zweitens erhalten Sie auch noch Feedback, wieviele Datensätze von der Änderung betroffen sind (siehe Bild 2).

Hilfsformular zum Ausführen von SQL-Aktionsabfragen

Bild 2: Hilfsformular zum Ausführen von SQL-Aktionsabfragen

Das Formular ist außerdem an eine Tabelle namens tblAktionsabfragen gebunden, die alle Beispielaufrufe dieses Artikels speichert – Sie können diese also im Formular durchlaufen und ausprobieren. Der notwendige Code hinter der Schaltfläche ist einfach:

Private Sub cmdAusfuehren_Click()

     Dim db As DAO.Database

     Set db = CurrentDb

     db.Execute Me!txtAktionsabfrage, dbFailOnError

     MsgBox "Anzahl betroffener Datensätze: " _

         & db.RecordsAffected

     Set db = Nothing

End Sub

Er führt lediglich die Aktionsabfrage aus und fragt nachher mit der Eigenschaft RecordsAffected ab, wieviele Datensätze von der Änderung betroffen sind.

Die tatsächlich für die Schaltfläche hinterlegte Prozedur ist etwas komplizierter, weil diese es erlaubt, die durchgeführten Änderungen wieder zu verwerfen – dieses Thema werden wir jedoch in einem anderen Artikel behanden, aktuell dient dies nur Ihrer Bequemlichkeit.

Syntax ermitteln

In den folgenden Abschnitten erhalten Sie grundlegende Informationen zu den vier möglichen Aktionsabfragen. Damit können Sie wahrscheinlich die meisten Konstellationen abbilden. Allerdings kann es auch sein, dass Sie doch einen kleinen Denkanstoß benötigen – in diesem Falle ziehen Sie dann doch die Entwurfsansicht für Abfragen zuhilfe und erstellen damit die gewünschte Aktionsabfrage. Anschließend können Sie den SQL-Code für diese Abfrage ganz einfach ermitteln.

Die Abfrage aus Bild 3 etwa soll die Einzelpreise aller Datensätze um 10% erhöhen, von denen im November 2011 mehr als 100 verkauft wurden. Nachdem Sie diese Abfrage eingegeben haben, können Sie mit einem Rechtsklick auf die Titelleiste des Abfrageentwurfs und dem anschließenden Auswählen des Eintrags SQL-Ansicht des Kontextmenüs die SQL-Ansicht betrachten. Einen solchen Ausdruck werden Sie erst nach einiger Übung aus dem Kopf entwerfen können ... (siehe Bild 4). Dennoch: Auch diese Ausdruck können Sie kopieren und mit dem oben vorgestellten Formular ausführen lassen. Sie dürfen die SQL-Ansicht natürlich auch für die Ermittlung der SQL-Ausdrücke einfacherer Aktionsabfragen heranziehen. In den folgenden Abschnitten lernen Sie nun die SQL-Syntax der vier verschiedenen SQL-Aktionsabfragen kennen.

Komplizierte Abfrage im Entwurf

Bild 3: Komplizierte Abfrage im Entwurf

Komplizierte Abfrage – unter SQL noch verwirrender

Bild 4: Komplizierte Abfrage – unter SQL noch verwirrender

Daten löschen

Löschabfragen haben die einfachste Syntax der Aktionsabfragen, da hier keine Angabe eines Zielfeldes notwendig ist:

DELETE FROM [WHERE-Klausel]

Um beispielsweise alle Artikel aus der Artikeltabelle zu löschen, deren Preis höher als 10 EUR ist, verwenden Sie die folgende Abfrage:

DELETE FROM tblArtikel WHERE Einzelpreis>10;

Es kann aber auch sein, dass die Syntax etwas komplizierter wird: Wenn die Datenherkunft der Abfrage mehr als eine Tabelle enthält, weil Sie etwa ein Feld einer verknüpften Tabelle als Kriterium für die zu löschenden Datensätze verwenden möchten, müssen Sie zwischen DELETE und FROM noch angeben, aus welcher der angegebenen Tabelle die zu löschenden Datensätze stammen. Dann schreiben Sie beispielsweise folgende Aktionsabfrage:

DELETE tblArtikel.* FROM tblArtikel INNER JOIN ...

Daten aktualisieren

Zum Aktualisieren von Daten sind Aktionsabfragen gerade dann interessant, wenn größere Mengen Daten nach dem gleichen Schema geändert werden sollen - etwa, wenn alle Preise in einer Artikeltabelle um einen bestimmten Prozentsatz herabgesetzt werden sollen. Aktualisierungsabfragen sind nach dem folgenden Schema aufgebaut:

UPDATE

SET =

[, = , ...]

[WHERE-Klausel]

Dabei ist die Tabelle, deren Daten geändert werden sollen. , und so weiter sind die Feldnamen, deren Feldwerte angepasst werden sollen. , und so weiter repräsentieren die einzufügenden Werte. Die folgende Beispielabfrage reduziert alle Preise in der Tabelle Artikel um 10 %:

UPDATE Artikel

SET Artikel.Einzelpreis =

Artikel.Einzelpreis * 0.9;

Daten hinzufügen

Für das Hinzufügen neuer Datensätze in eine bestehende Tabelle ist unter SQL die INSERT INTO-Abfrage verantwortlich. Es gibt zwei Varianten der INSERT INTO-Abfrage, die die anzufügenden Daten auf unterschiedliche Weise ermitteln.

INSERT INTO mit VALUES

Die erste Variante arbeitet mit konkret angegebenen Werten und fügt jeweils nur einen Datensatz zu der mit angegebenen Tabelle hinzu:

INSERT INTO

([, , ...])

VALUES([, , ...])

Die folgende Beispielabfrage fügt eine neue Kategorie zur Tabelle tblKategorien hinzu:

INSERT INTO tblKategorien

(Kategoriename, Beschreibung)

VALUES ('Neue Kategorie',

'Dies ist eine Beispielkategorie.')

INSERT INTO mit SELECT

Die zweite Variante kann einen oder mehrere Datensätze auf Basis bestehender Daten anfügen.

Sie ist folgendermaßen aufgebaut:

INSERT INTO

([, , ...])

SELECT [, , ...]

[FROM [Bedingung]]

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!