window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

DAO: Querydefs und Parameterabfragen unter VBA

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Mit der QueryDefs-Auflistung greifen Sie per VBA auf die in einer Datenbank gespeicherten Abfragen zu, legen neue Abfragen an oder öffnen Abfragen mit Parametern per VBA. Sie können damit sogar temporäre Abfragen erstellen, die Sie nur einmal benötigen, und diese anschließend wieder löschen. Dieser Artikel zeigt alle Tricks rund um die Arbeit mit dem QueryDef-Objekt.

Beispieldatenbank

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

Das QueryDef-Objekt

Ein QueryDef-Objekt ist die Repräsentation einer Abfrage unter VBA beziehungsweise DAO. Sie können mit DAO beispielsweise die Namen aller in der Datenbank gespeicherten Abfragen ausgeben, deren SQL-Code ansehen, neue Abfragen anlegen oder bestehende Abfragen löschen.

Wenn Sie beispielsweise alle Abfragen der Datenbank im Direktfenster auflisten möchten, erstellen Sie eine kleine VBA-Prozedur. Dazu benötigen Sie zunächst ein Standardmodul. öffnen Sie mit Strg + G oder Alt + F11 den VBA-Editor und wählen Sie den Menüeintrag Einfügen|Modul. Speichern Sie das Modul mit Strg + S unter dem Namen mdlQuerydefs.

Nun fügen Sie dem Modul die folgende Prozedur hinzu:

Public Sub AbfragenAuflisten()
     Dim db As DAO.Database
     Dim qdf As DAO.QueryDef
     Set db = CurrentDb
     For Each qdf In db.QueryDefs
         Debug.Print qdf.Name
     Next qdf
     Set db = Nothing
End Sub

Platzieren Sie die Einfügemarke innerhalb der Prozedur und betätigen Sie die Taste F5, um die Prozedur auszuführen. Was geschieht Die Prozedur gibt alle in der Datenbank enthaltenen Abfragen im Direktfenster aus (siehe Bild 1).

Ausgabe aller Abfragen der Datenbank

Bild 1: Ausgabe aller Abfragen der Datenbank

Das Ergebnis ist interessant: Dort finden sich nämlich nicht nur die im Navigationsbereich beziehungsweise im Datenbankfenster sichtbaren Abfragen, die normalerweise mit dem Präfix qry versehen werden, sondern auch noch Einträge, die mit dem Tilde-Zeichen beginnen (~).

Dabei handelt es sich um solche Abfragen, die als Datenherkunft etwa für Formular, Berichte oder Kombinationsfelder angelegt wurden.

Wenn Sie beispielsweise ein Formular namens frmArtikel anlegen und diesem eine Abfrage als Datenherkunft zuweisen, wird diese unter dem Namen ~sq_ffrmArtikel ausgegeben. Wenn Sie ein Formular namens frmMitCboArtikel und einem Kombinationsfeld namens cboArtikel anlegen und dem Kombinationsfeld eine Abfrage als Datensatzherkunft zuweisen, finden Sie unter den Abfrage mit obiger Prozedur einen Eintrag namens ~sq_cfrmMitCboArtikel~sq_ccboArtikel vor. Die Namen dieser versteckt gespeicherten Abfragen werden also aus dem Formularnamen und, wenn ein Kombinationsfeld oder ein Listenfeld im Spiel ist, auch noch aus dem Namen des Steuerelements gebildet – dieser Exkurs nur als Erläuterung diese kryptisch anmutenden Abfragenamen.

Was genau erledigt nun die oben vorgestellte Prozedur Sie deklariert zunächst eine Objektvariable namens db, welche einen Verweis auf das Database-Objekt zur aktuellen Datenbank aufnimmt. Eine weitere Objektvariable soll später mit Verweisen auf die QueryDef-Objekte der Datenbank gefüttert werden, was der gespeicherten Definition einer Abfrage entspricht. Und dies bezieht sich, wie oben angeführt, nicht nur auf die durch den Benutzer gespeicherten Abfragen, sondern auch auf die Datenherkünfte und datensatzherkünfte von Formularen, Berichten, Kombinationsfeldern und Listenfeldern.

Die Variable db wird nun mit einem Verweis auf das Database-Objekt gefüllt. Die Variable qdf wird in einer For Each-Schleife nacheinander mit Verweisen auf alle in der QueryDefs-Auflistung enthaltenen QueryDef-Objekte versehen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar