Kapitel 38
Datenzugriff mit DAO
836
Beachten Sie, dass der Positionszeiger nach dem Löschvorgang immer noch auf
den gerade gelöschten Datensatz zeigt.
Ist SQL doch besser?
Wir möchten Ihnen zu bedenken geben, dass sich alle Änderungen an Datensätzen auch mit SQL
vornehmen lassen. Der SQL-Befehl UPDATE ermöglicht die schnelle Änderung von Datensatzgrup-
pen, mit INSERT INTO können Sie neue Datensätze aufnehmen.
Abfragen nutzen mit QueryDefs
Mit der
OpenRecordset
-Methode lassen sich, wie beschrieben, gespeicherte Auswahlabfragen öffnen
oder SQL-Zeichenfolgen direkt eingeben. Für die Bearbeitung von Aktions-, Kreuztabellen-, Daten-
definitions- und Parameterabfragen benötigen Sie
QueryDef
-Objekte.
Mit QueryDef-Objekten arbeiten
An einem kurzen Beispiel möchten wir Ihnen den Einsatz einer Aktualisierungsabfrage in einem
Programm erläutern. Auf die entsprechende gespeicherte Abfrage wird über ihren Namen zuge-
griffen. Jede gespeicherte Abfrage ist Bestandteil der
QueryDefs
-Auflistung. Liefern Abfragen keine
Datensätze zurück, sondern führen sie eine Aktion durch, werden sie mit der Methode
Execute
ausgeführt.
Die Abfrage qupdArtikelPreiserhöhung war übrigens mit
UPDATE tblArtikel SET tblArtikel.Ver-
kaufspreis = [Verkaufspreis]*1.15
vereinbart.
Versuchen Sie Auswahl-, Kreuztabellen- oder Union-Abfragen mit der Methode
Execute
auszufüh-
ren, erhalten Sie eine Fehlermeldung angezeigt. Deshalb kann es sinnvoll sein, den Typ der Abfrage
zu überprüfen. In der Eigenschaft
Type
des
QueryDef
-Objektes wird der Typ der Abfrage zurückgege-
ben. Verwenden Sie die in der folgenden Tabelle angegebenen Konstanten, um eine Typüberprüfung
vorzunehmen.
HINWEIS
Sub PreiserhöhungMitAbfrage_DAO()
Dim db As DAO.Database
Dim qry As DAO.QueryDef
Dim rst As DAO.Recordset
Set db = CurrentDb()
' Die Aktualisierungsabfrage "qupdArtikelPreiserhöhung"
' erhöht die Preise um 15%
Set qry = db.QueryDefs("qupdArtikelPreiserhöhung")
' Ausführen der Abfrage
qry.Execute
Debug.Print qry.RecordsAffected & " Artikel geändert."
End Sub
Abfragen nutzen mit QueryDefs
837
Programmierung
Das folgende Programm zeigt, wie aufgrund des Typs der Abfrage verzweigt werden kann:
Tabelle 38.3
Konstanten für Abfragetypen
Konstante Beschreibung
dbQSelect
Auswahlabfrage
dbQAction
Aktionsabfrage
dbQCrosstab
Kreuztabellenabfrage
dbQDelete
Löschabfrage
dbQUpdate
Aktualisierungsabfrage
dbQAppend
Anfügeabfrage
dbQMakeTable
Tabellenerstellungsabfrage
dbQSetOperation
UNION-Abfrage
Sub AbfrageAusführen_DAO()
Dim db As DAO.Database
Dim qry As DAO.QueryDef
Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim strQry As String
Set db = CurrentDb()
strQry = InputBox("Name der Abfrage")
' Öffnen der vorhandenen Abfrage.
' Falls die Abfrage nicht vorhanden ist, bricht
' die Prozedur mit einer Fehlermeldung ab.
Set qry = db.QueryDefs(strQry)
' Nur Auswahl-, UNION- oder Kreuztabellenabfragen
If qry.Type = dbQSelect Or qry.Type = dbQSetOperation _
Or qry.Type = dbQCrosstab Then
' Öffnen des Recordsets
Set rst = qry.OpenRecordset()
' Für alle Datensätze
Do Until rst.EOF
' Alle Felder hintereinander ausgeben,
' getrennt durch Schrägstrich
For Each fld In rst.Fields
Debug.Print fld; "/";
Next
' Neue Zeile im Testfenster beginnen
Debug.Print
rst.MoveNext
Loop
rst.Close
Else
' Aktionsabfrage ausführen
qry.Execute
Debug.Print qry.RecordsAffected & " Datensätze"
End If
End Sub
Kapitel 38
Datenzugriff mit DAO
838
Übrigens zeigt die Prozedur, wie die Auflistung
Fields
eines Recordsets verwendet werden kann, um
eine vorher unbekannte Anzahl von Feldern auszugeben.
Ausführung mit der Methode Execute
Eine Aktionsabfrage lässt sich direkt ausführen, d.h., Sie geben dazu der Methode
Execute()
die in
SQL formulierte Abfrage als Parameter mit. Es handelt sich hierbei allerdings um eine Methode der
Datenbank, nicht um die eines
QueryDef
-Objektes.
Eigenschaften von QueryDef-Objekten
QueryDef-Objekte verfügen über eine Vielzahl von Eigenschaften, die in der folgenden Tabelle auf-
geführt sind.
Parameterabfragen erzeugen
Im Folgenden möchten wir Ihnen die Arbeit mit Parameterabfragen beschreiben. Die Parameter
einer Abfrage können aus Ihrem Programm heraus gefüllt werden.
Parameterabfragen lassen sich nicht direkt in der
OpenRecordset
-Methode verwenden, sondern Sie
müssen immer zuerst ein
QueryDef
-Objekt erzeugen und die Parameter setzen.
Sub PreiserhöhungUm10Prozent_DAO()
Dim db As DAO.Database
Set db = CurrentDb()
' Preiserhöhung um 10% durchführen
db.Execute ( "UPDATE tblArtikel " & _
"SET Verkaufspreis = [Verkaufspreis]*1.1")
End Sub
Tabelle 38.4
Eigenschaften des QueryDef-Objektes
Eigenschaft Beschreibung
DateCreated
Gibt das Erstellungsdatum zurück
LastUpdated
Liefert das Datum der letzten Änderung
Name
Gibt den Namen der Abfrage an
RecordsAffected
Gibt die Anzahl der Datensätze zurück, die von der Abfrage betroffen sind
SQL
Gibt eine SQL-Zeichenfolge an
Type
Gibt den Typ der Abfrage an
Updatable
Gibt an, dass das Dynaset der Abfrage bearbeitbar ist, wenn
Updatable
wahr ist
Abfragen nutzen mit QueryDefs
839
Programmierung
Jede Parameterabfrage besitzt eine
Parameters
-Auflistung, in der die einzelnen Parameter beschrieben
sind. Jedes Parameter-Objekt verfügt über die Eigenschaften
Name
,
Type
und
Value
. Um die Parameter
zu setzen, können Sie verschiedene Schreibweisen verwenden, die verallgemeinert die im Folgenden
aufgeführten Formen haben. Die vollständige Schreibweise lautet
wobei Wert für eine Zahl, einen String oder einen anderen Typ stehen kann. Da
Value
die Standard-
eigenschaft ist, kann
.Value
wie in
weggelassen werden. Access gibt sich auch mit
zufrieden. Sie können die Parameter auch durchzählen und
verwenden. Für das erste Beispiel möchten wir Ihnen zuerst die Abfrage qryFilmeStartdatum in
Abbildg. 38.5 vorstellen.
Abbildg. 38.5
Abfrage mit Parameter
Beim Ausführen der Abfrage wird der Parameter [Start nach dem:] abgefragt. Wir verwenden die
Abfrage nun in der folgenden Prozedur:
qry.PARAMETERS("ParameterName").Value = Wert
qry.Parameters("ParameterName") = Wert
qry("ParameterName") = Wert
qry.Parameters(0) = Wert

Get Microsoft Office Access 2007 - 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.