Aktionsabfragen per VBA ausführen

Aktionsabfragen lassen sich bequem mit der Entwurfsansicht für Abfragen zusammenstellen. Sie können damit Daten an Tabellen anfügen, bestehende Daten ändern oder löschen und sogar gleich die passende Tabelle zum Einfügen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken Dieser Artikel zeigt, wie Sie dies realisieren.

Beispieldatenbank

Die Beispiele zu diesem Artikel finden Sie in der Datenbank 1105_AktionsabfragenPerVBA.mdb.

Aktionsabfragen

Wenn Sie eine Aktionsabfrage erstellen, gehen Sie wie in Aktionsabfragen – Teil II: Löschabfragen oder Aktionsabfragen – Teil I: Anfügeabfragen beschrieben vor. Weitere Artikel zu Aktualisierungsabfragen oder Tabellenerstellungsabfragen folgen in späteren Ausgaben.

Das Resultat beim Erstellen einer Aktualisierungsabfrage mit der Abfrageentwurfsansicht ist eine gespeicherte Abfrage. Diese führen Sie per Doppelklick auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich aus.

Ein Beispiel hierfür ist die Löschabfrage aus Bild 1. Sie ist unter dem Namen qryArtikelLoeschen gespeichert und bildet die Grundlage für das folgende Beispiel.

Entwurfsansicht einer Abfrage zum Löschen des Artikels mit dem Wert 1 im Feld ArtikelID.

Bild 1: Entwurfsansicht einer Abfrage zum Löschen des Artikels mit dem Wert 1 im Feld ArtikelID.

Die Abfrage löscht genau einen Datensatz, und zwar den mit dem Wert 1 im Feld ArtikelID. Das gilt natürlich nur, wenn ein solcher Datensatz überhaupt vorhanden ist. Sonst bewirkt der Aufruf dieser Abfrage gar nichts.

Die Execute-Methode

Nun folgt der interessante Teil: Access bietet eine ganze Reihe von VBA-Objekten an, die wiederum praktische Methoden etwa für den Zugriff auf Daten offerieren. In unserem Fall geht es um das Objekt, dass die aktuelle Datenbank repräsentiert.

Es hat den Datentyp Database und wird als Objektvariable deklariert. Das alles ist für Einsteiger vielleicht noch etwas unverständlich – das ist aber kein Problem. Manche Dinge kann man zu Beginn einfach als gegeben hinnehmen. In diesem Fall geht es um die folgenden Codezeilen:

Dim db As Database
Set db = CurrentDb

Die erste Zeile deklariert db als Objektvariable des Typs Database, die zweite füllt diese Variable mit dem Wert der Funktion CurrentDb. CurrentDb wiederum liefert einen Verweis auf die aktuelle Datenbank.

Dank dieser beiden Zeilen können Sie nachfolgend über die Variable db bestimmte Aktionen mit der Datenbank durchführen.

In unserem Fall soll eine Aktionsabfrage durchgeführt werden, genau genommen eine Löschabfrage.

Der dazu benötigte Befehl des mit db referenzierten Objekts heißt Execute. Execute erwartet als Parameter zumindest eine Variable oder Zeichenkette, die folgendes enthält:

  • den Namen der Aktionsabfrage, wie Sie ihn auch im Datenbankfenster oder im Navigationsbereich finden (hier also beispielsweise qryArtikelLoeschen)
  • den SQL-Code der Aktionsabfrage (wie Sie diesen ermitteln, erfahren Sie gleich).

Am einfachsten ist es natürlich, wenn Sie eine DELETE-Abfrage per Abfrageentwurf zusammenstellen und diese direkt per VBA aufrufen möchten. Die nötigen Anweisungen sehen dann so aus:

Private Sub EinfacherAufruf()
     Dim db As DAO.Database
     Set db = CurrentDb
     db.Execute "qryArtikelLoeschen"
     Set db = Nothing
End Sub

Wenn Sie das Beispiel nachvollziehen möchten, legen Sie ein neues Standardmodul an und fügen Sie den obigen Code dort ein (?[basics] VBA-Modul anlegen).

Wenn Sie als Parameter der Execute-Methode einfach nur den Namen einer Aktionsabfrage angeben, wird diese einfach aufgerufen. Allerdings müssen bereits alle Einstellungen in der Abfrage selbst vorgenommen werden – zum Beispiel, ob alle Datensätze der Tabelle gelöscht werden sollen oder nur einer. Im obigen Beispiel wird die Abfrage qryArtikelLoeschen ausgelöst, was den Artikel mit dem Wert 1 im Feld ArtikelID löscht.

Die Abfrage führen Sie beispielsweise aus, indem Sie die Einfügemarke irgendwo innerhalb der Prozedur platzieren und dann die Taste F5 betätigen oder den Menübefehl Ausführen|Sub/Userform ausführen aufrufen.

Für den Anfang prüfen Sie nun per Sichtkontrolle, ob der Datensatz tatsächlich gelöscht wurde – und zwar, indem Sie die Tabelle tblArtikel öffnen und schauen, ob der Datensatz noch vorhanden ist.

Achtung: Keine Rückfrage!

Die Execute-Anweisung führt die angegebene Aktionsabfrage ohne Rückfrage aus. Wenn Sie also etwa einen Artikel erst löschen möchten, wenn der Benutzer dem explizit zugestimmt hat, müssen Sie die Execute-Anweisung noch in eine If…Then-Bedingung einfassen, die das Ergebnis einer MsgBox-Funktion prüft. Dies kann etwas allgemein formuliert etwa so aussehen:

If MsgBox("Datensatz löschen", vbYesNo) = vbYes Then
     Set db = CurrentDb
     db.Execute "qryArtikelLoeschen"
End If

Aktionsabfrage als SQL-Ausdruck angeben

Manchmal kann es hilfreich sein, die Aktionsabfrage nicht als Abfrage zu speichern, sondern direkt auszuführen. Das bedeutet, dass Sie der Execute-Anweisung nicht den Namen der gespeicherten Abfrage, sondern einen entsprechenden SQL-Ausdruck angeben.

Fehlende SQL-Kenntnisse sind hier kein Problem: Access bietet die Möglichkeit, Abfragen in der SQL-Ansicht anzuzeigen. Und aus dieser können Sie den gewünschten SQL-Ausdruck einfach herauskopieren und in den VBA-Code einfügen.

Im Falle der Aktionsabfrage unseres Beispiels sieht das so aus:

  • öffnen Sie die Abfrage in der Entwurfsansicht.
  • Klicken Sie mit der rechten Maustaste auf die Titelzeile und wählen Sie den Eintrag SQL-Ansicht aus (siehe Bild 2).
  • SQL-Ansicht einer Abfrage aktivieren

    Bild 2: SQL-Ansicht einer Abfrage aktivieren

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar