Home > Artikel > Ausgabe 11/2012 > Aktionsabfragen per VBA

Aktionsabfragen per VBA

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).

Mit Aktionsabfragen ändern Sie Daten – ganz im Gegensatz zu Auswahlabfragen, mit denen Sie Daten selektieren. Die Grundlagen zur Erstellung von Aktionsabfragen mit der Entwurfsansicht für Abfragen haben wir in früheren Artikeln bereits behandelt, aber wir haben uns noch nicht im Detail angesehen, wie Sie solche Abfragen unter VBA ausführen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1211_AktionsabfragenPerVBA.mdb.

Varianten

Es gibt mehrere Möglichkeiten, eine Aktionsabfrage unter VBA auszuführen. Die zwei bekanntesten sind die folgenden: Die erste ist die RunSQL-Methode des DoCmd-Objekts. Diese erwartet als Parameter den Namen einer gespeicherten Aktionsabfrage oder den entsprechenden SQL-Ausdruck. Optional kann eine Transaktion angegeben werden, in der die Aktionsabfrage ausgeführt wird. Die zweite Variante ist die Execute-Methode des Database-Objekts der DAO-Bibliothek. Sie bietet ebenfalls einen Parameter an, dem Sie den SQL-Ausdrucks der auszuführenden Abfrage zuweisen – jedoch keine gespeicherten Abfragen, die Sie mit der Abfrage-Entwurfsansicht erstellt haben! Der zweite Parameter jedoch dient der Übergabe von Optionen.

Die Execute-Anweisung bietet wesentlich mehr Möglichkeiten als die RunSQL-Methode. Sie können beispielsweise Fehler abfragen, die beim Ausführen von Aktionsabfragen mit der Execute-Anweisung auftreten, oder Sie fragen die Anzahl der von der Aktionsabfrage betroffenen Datensätze ab. Schließlich können Sie auch noch den Primärschlüsselwert des zuletzt hinzugefügten Datensatzes ermitteln, sofern dieser mit einer Aktionsabfrage hinzugefügt wurde.

Einsatz der DoCmd.RunSQL-Methode

Die DoCmd.RunSQL-Methode ist prinzipiell mit dem Menübefehl zum Ausführen der aktuell im Datenbankfenster beziehungsweise im Navigationsbereich markierten Aktionsabfrage zu vergleichen. Der Unterschied ist, dass Sie bei der VBA-Anweisung noch den Namen der Anweisung angeben müssen. Um eine einfache Abfrage zum Ändern eines Datensatzes auszuführen, legen Sie diese zunächst wie in Bild 1 an und speichern sie unter dem Namen qryLagerbestandErhoehen. Die Abfrage erhöht den Bestand des Artikels mit dem Wert 1 im Feld ArtikelID um 1.

Aktionsabfrage zum Erhöhen des Lagerbestandes eines Artikels um 1

Bild 1: Aktionsabfrage zum Erhöhen des Lagerbestandes eines Artikels um 1

Wechseln Sie dann in die SQL-Ansicht der Abfrage (am einfachsten durch einen Rechtsklick auf die Titelleiste der Abfrage und Auswahl des Eintrags SQL-Ansicht aus dem Kontextmenü) und kopieren Sie den dort angezeigten SQL-Ausdruck in die Zwischenablage (siehe Bild 2). Diese fügen Sie dann in Anführungszeichen als ersten Parameter der RunSQL-Methode im Direktfenster des VBA-Editors ein (Strg + G):

SQL-Ansicht der Abfrage qryLagerbestandErhoehen

Bild 2: SQL-Ansicht der Abfrage qryLagerbestandErhoehen

DoCmd.RunSQL "UPDATE tblArtikel SET Lagerbestand = [Lagerbestand]+1 WHERE ArtikelID=1"

Das Ausführen dieser Abfrage durch Betätigen der Eingabetaste führt zum Anzeigen der Meldung aus Bild 3. Wenn Sie auf Ja klicken, wird der Datensatz geändert, anderenfalls löst dies einen Fehler aus.

Hinweis auf den anstehenden Löschvorgang

Bild 3: Hinweis auf den anstehenden Löschvorgang

Anhand eines weiteren Beispiels überzeugen wir uns noch davon, dass RunSQL tatsächlich nicht mit dem Namen einer gespeicherten Abfrage als Parameter funktioniert. Den Aufruf und das Ergebnis sehen Sie in Bild 4.

Fehler beim Ausführen einer gespeicherten Abfrage mit DoCmd.RunSQL

Bild 4: Fehler beim Ausführen einer gespeicherten Abfrage mit DoCmd.RunSQL

Meldungen an- und ausschalten

Die beim Ausführen von Aktionsabfragen erscheinenden Meldungen können Sie deaktivieren. Da Sie ohnehin gerade im Direktfenster arbeiten, können Sie dies per VBA erledigen:

DoCmd.SetWarnings False

Mit dieser Anweisung schalten Sie die Meldungen wieder an:

DoCmd.SetWarnings True

Sie können diese Option auch in den Access-Optionen einstellen – etwa wie in Bild 5 unter Access 2010. Die entsprechende Option heißt Aktionsabfragen.

Aktivieren und Deaktivieren der Warnmeldungen

Bild 5: Aktivieren und Deaktivieren der Warnmeldungen

Ausführen mit Execute

Angenommen, Sie haben bereits eine Aktionsabfrage etwa zum Löschen eines Datensatzes unter dem Namen qryArtikelLoeschen gespeichert. Dann können Sie den Namen der Abfrage mit der Execute-Methode auch direkt als Parameter angeben – im Gegensatz zur RunSQL-Methode. Dies sieht etwa im Direktfenster wie folgt aus:

CurrentDB.Execute "qryLagerbestandErhoehen"

Als Objekt kommt hier CurrentDB zum Zuge, dass einen Verweis auf das Database-Objekt für die aktuelle Datenbank liefert.

Ein wesentlicher Unterschied zur DoCmd.RunSQL-Anweisung lässt sich hier auch erkennen: es gibt keine Warnmeldung.

Fehler erkennen

Wenn Sie der DoCmd.RunSQL-Methode eine fehlerhafte SQL-Anweisung übergeben – also beispielsweise eine, die sich auf eine nicht vorhandene Tabelle bezieht –, erhalten Sie eine entsprechende Fehlermeldung (siehe Bild 6).

Fehlermeldung beim Ausführen eines fehlerhaften SQL-Ausdrucks mit DoCmd.RunSQL

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!