Kapitel 37
Datenzugriff mit ADO
804
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 ausführen
Mit der
Open
-Methode für Recordsets lassen sich, wie beschrieben, gespeicherte Auswahlabfragen
öffnen oder SQL-Zeichenfolgen direkt eingeben. Für die Bearbeitung von Aktions-, Datendefini-
tions- und Parameterabfragen benötigen Sie
Command
-Objekte bzw. können Sie die
Execute
-Methode
des
Connection
-Objekts einsetzen.
Die Execute-Methode des Connection-Objekts
An einem kurzen Beispiel möchten wir Ihnen den Einsatz einer Aktualisierungsabfrage in einem
Programm erläutern. Liefern Abfragen keine Datensätze zurück, sondern führen sie eine Aktion
durch, werden sie mit der Methode
Execute
des
Connection
-Objekts ausgeführt.
With rst
' Recordset bearbeitbar?
If .Supports(adUpdate) Then
Do Until .EOF
' Datensatz löschen
.Delete
' zum nächsten Datensatz gehen
.MoveNext
Loop
Else
MsgBox "Recordset nicht bearbeitbar!"
End If
End With
rst.Close
Set rst = Nothing
End Sub
HINWEIS
Sub PreiserhöhungUm15Prozent_ADO()
Dim conn As ADODB.Connection
Dim lngRecordsAffected As Long
Set conn = CurrentProject.Connection
' Preiserhöhung durchführen
conn.Execute "UPDATE tblArtikel SET Verkaufspreis = " & _
"[Verkaufspreis]*1.15", lngRecordsAffected
Debug.Print lngRecordsAffected & " Artikel geändert."
End Sub
Abfragen ausführen
805
Programmierung
Möchten Sie eine gespeicherte Access-Abfrage verwenden, so wird darauf über ihren Namen zuge-
griffen.
Die Abfrage qupdArtikelPreiserhöhung war übrigens mit
UPDATE tblArtikel SET tblArtikel.Ver-
kaufspreis = Runden([Verkaufspreis]*1.15, 2)
vereinbart.
Versuchen Sie Auswahl-, Kreuztabellen- oder Union-Abfragen mit der Methode
Execute
auszufüh-
ren, erhalten Sie eine Fehlermeldung angezeigt.
Parameter-Abfragen
Im Folgenden möchten wir Ihnen die Arbeit mit Parameterabfragen (Kapitel 15) beschreiben. Die
Parameter einer Abfrage können aus Ihrem Programm heraus gefüllt werden.
Die Ausführung von Parameterabfragen ist nicht so einfach wie die Ausführung einer normalen
Abfrage mithilfe eines Recordsets bzw. mithilfe der
Execute
-Methode. Hier zeigt es sich, dass ADO
nachträglich in Access aufgenommen wurde.
Für die Ausführung einer Parameterabfrage benötigen Sie ein
Command
-Objekt. Ein
Command
-Objekt ver-
fügt über eine Auflistung aller Parameter
Parameters
. Sie können die Parameter mit den entsprechen-
den Werten füllen und die Abfrage dann mit der Methode
Execute
des
Command
-Objekts ausführen.
Execute
gibt ein
Recordset
-Objekt zurück.
Um die Parameter zu setzen, können Sie verschiedene Schreibweisen verwenden, die verallge-
meinert 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
Sub PreiserhöhungMitAbfrage_ADO()
Dim conn As ADODB.Connection
Dim lngRecordsAffected As Long
Set conn = CurrentProject.Connection
' Die Aktualisierungsabfrage "qupdArtikelPreiserhöhung"
' erhöht die Preise um 15%
conn.Execute "qupdArtikelPreiserhöhung", lngRecordsAffected
Debug.Print lngRecordsAffected & " Artikel geändert."
End Sub
cmd.Parameters("ParameterName").Value = Wert
cmd.Parameters("ParameterName") = Wert
cmd("[ParameterName]") = Wert
Kapitel 37
Datenzugriff mit ADO
806
zufrieden. Sie können die Parameter auch durchzählen und
oder
verwenden.
Parameterabfrage mit Command-Objekt
Im folgenden Beispiel wird ein
Command
-Objekt mit einer Abfrage mit einem Parameter erzeugt, die
Abfrage ausgeführt und die Daten im Direktfenster ausgegeben. Das so erzeugte
Command
-Objekt ist
temporär, die Abfrage wird nicht in Access gespeichert.
Beachten Sie, dass der Name des Parameters mit den eckigen Klammern angegeben werden muss.
Übrigens zeigt die Prozedur, wie die Auflistung
Fields
eines Recordsets verwendet werden kann, um
eine vorher unbekannte Anzahl von Feldern auszugeben.
Es kann mit ADO auch die Schreibweise für Parameter eingesetzt werden, wie sie beispielsweise für
Gespeicherte Prozeduren (»Stored Procedures«) für den Microsoft SQL-Server und andere Daten-
banken verwendet wird. Dazu wird der Parameter in der Abfrage mit einem Fragezeichen dargestellt.
cmd.Parameters(0) = Wert
cmd(0) = Wert
Sub ParameterAbfrageDirekt_ADO()
Dim cmd As New ADODB.Command
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = _
"select FilmNr,Filmtitel,Länge from tblFilme where filmtitel like [Welche Filme?]"
cmd.Parameters("[Welche Filme?]") = "L%"
' Recordset erzeugen
Set rst = cmd.Execute
' Datensätze im Testfenster ausgeben
Do Until rst.EOF
' Die Inhalte der Felder ausgeben,
' durch Schrägstrich getrennt
For Each fld In rst.Fields
Debug.Print fld.Name; "="; fld.Value; "/";
Next
' Neue Zeile erzeugen
Debug.Print
rst.MoveNext
Loop
rst.Close
Set cmd = Nothing
End Sub
Abfragen ausführen
807
Programmierung
Mithilfe der Methode
CreateParameter
des
Command
-Objekts lassen sich benannte Parameter generieren.
Zugriff auf Access-Parameterabfragen
Zuerst möchten wir Ihnen die Abfrage qryFilmeStartdatum in Abbildg. 37.5 vorstellen.
Abbildg. 37.5
Abfrage mit Parameter
Beim Ausführen der Abfrage wird der Parameter [Start nach dem:] abgefragt.
Das folgende Programm-Listing zeigt die Übergabe der Parameter an die Access-Parameterabfrage.
Dem
Command
-Objekt ist nicht bekannt, wie die Parameter heißen oder wie viele Parameter in der
Abfrage vereinbart wurden.
...
cmd.CommandText = "select * from tblFilme where filmtitel like ?"
cmd.Parameters(0) = "L%"
...
Sub Parameterabfrage_ADO()
Dim cmd As New ADODB.Command
Dim rst As ADODB.Recordset
Dim conn As ADODB.Connection
Dim fld As ADODB.Field
Dim lngRecordsAffected As Long
' Aktuelle Datenbank benutzen
Set conn = CurrentProject.Connection
' Verbindung zuweisen
Set cmd.ActiveConnection = conn

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.