BEISPIEL
HINWEIS
BEISPIEL
Kapitel 6: DAO-Programmierung
Abfragen erstellen/ausführen
Führen Sie ein und dieselbe SQL-Abfrage mehrfach in einer Anwendung aus oder variiert nur ein Para-
meter, ist es sinnvoll, eine Abfrage zu erstellen. Access speichert diese in optimierter Form in der Daten-
bank. Natürlich können Sie die Abfrage nicht nur über den QbE-Editor erzeugen, sondern auch über die
Datenbank-Engine. Alles, was Sie dazu brauchen, ist ein initialisiertes Database-Objekt sowie eine Objekt-
variable vom Typ QueryDef.
Erzeugen einer Abfrage »Abfrage1«, mit der alle Personen ermittelt werden, deren Nachname mit »A« be-
ginnt:
Dim db As Database
Dim qd As QueryDef
Set db = CurrentDb()
Set qd = db.CreateQueryDef("Abfrage1", "SELECT * FROM personen WHERE nachname LIKE 'A*'")
Möchten Sie die Abfrage nicht in der Datenbank speichern, übergeben Sie einfach einen Leerstring als Namen.
In diesem Fall wird die Abfrage lediglich temporär erzeugt.
Parameterabfragen
Wird eine SQL-Abfrage mit unterschiedlichen Parametern aufgerufen, spricht man von so genannten Para-
meterabfragen. Erstellen Sie die Abfrage mit der Datenbank-Engine, sollten Sie die Parameter vor der
eigentlichen SQL-Anweisung deklarieren. Verwenden Sie dazu die PARAMETERS-Klausel. Geben Sie
jeweils den Namen und den Datentyp des Parameters an. Den Namen schließen Sie in eckigen Klammern
ein.
Die Abfrage soll Mitarbeiter mit einem bestimmten Nachnamen auswählen:
Dim db As Database
Dim qd As QueryDef
Dim SQL As String
SQL = "PARAMETERS [Gesuchter Mitarbeiter] TEXT; " & _
"SELECT * FROM personen " & _
"WHERE nachname LIKE [Gesuchter Mitarbeiter]& '*'"
Set db = CurrentDb()
Set qd = db.CreateQueryDef("Parameterabfrage 1", SQL)
Beachten Sie die Aufrufsyntax für das Platzhalterzeichen »*«, es erfolgt eine Stringaddition innerhalb der
SQL-Anweisung.
Über die Parameters-Auflistung (Collection) des QueryDef-Objekts haben Sie später Zugriff auf die einzel-
nen Parameter.
308
BEISPIEL
BEISPIEL
HINWEIS
Übergabe von Parametern an eine Parameterabfrage:
Dim db As Database
Dim rs As Recordset
Dim qd As QueryDef
Set db = CurrentDb
Set qd = db.QueryDefs("Parameterabfrage 1")
qd.Parameters("Gesuchter Mitarbeiter") = "Müller"
...
Set rs = qd.OpenRecordset
SQL-Pass-Through-Abfragen
Bei diesem Abfragetyp sind einige Besonderheiten zu beachten. Beim Anlegen der Abfrage geben Sie nicht
den SQL-String an, da Access sonst davon ausgeht, dass es sich um eine Lokal-SQL-Abfrage handelt. Setzen
Sie danach die Connect-Eigenschaft des QueryDef-Objekts. Zum Schluss können Sie der SQL-Eigenschaft
die Pass-Through-Abfrage übergeben.
Pass-Through-Abfrage:
Dim db As Database
Dim qd As QueryDef
Set db = CurrentDb()
Set qd = db.CreateQueryDef("SQL-Pass-Through-Abfrage")
qd.Connect = "ODBC;DSN=BeispielSQL;UID=sa;PWD=;DATABASE=verleger"
qd.SQL = "SELECT * FROM verleger"
Mehr zum Aufbau des Connect-Strings finden Sie in den Kapiteln 9 und 10, die auch detailliert auf die
Thematik »SQL-Pass-Through« eingehen.
Handelt es sich um eine Abfrage, die keine Datensätze zurück gibt, müssen Sie die Eigenschaft ReturnsRecords
auf False setzen.
In SQL-Pass-Through-Abfragen können Sie natürlich auch so genannte Stored Procedures verwenden, die
wohl effektivste Variante im Client/Server-Betrieb.
Ausführen von Abfragen
Dabei müssen Sie zwischen zwei verschiedenen Modi unterscheiden:
Die Abfrage liefert eine Ergebnismenge zurück (Auswahlabfrage).
Es handelt sich um eine Aktionsabfrage (Löschen, Ändern etc.).
Der erste Fall wird in Kapitel 8 ausführlich dargestellt, im zweiten Fall nutzen Sie einfach die Execute-
Methode des QueryDef-Objekts. Die Anzahl der betroffenen Datensätze ermitteln Sie mit der Records-
Affected-Eigenschaft des QueryDef-Objekts.
309
Grundlegende Arbeitstechniken

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.