BEISPIEL
HINWEIS
Kapitel 7: ADO-Programmierung
Kommandos mutieren zu Methoden
Eine bemerkenswerte Fähigkeit des Connection-Objekts ist es, Kommandos quasi wie Methoden ausführen
zu können (query as method). Vorher ist es aber erforderlich, dem Command-Objekt einen Namen zu ge-
ben.
Ein
Command
-Objekt wird zu einer Methode namens
Befehl1
eines
Connection
-Objekts.
With cmd1
.Name = "Befehl1"
Set .ActiveConnection = conn ' Verweis auf geöffnete Verbindung
.CommandText = "UPDATE personen SET gehalt = gehalt-200 WHERE Gehalt > 5000"
End With
conn.Befehl1 ' Ausführen des Command-Objekts als Methode
Recordsets mit Daten füllen
Die im vorangegangenen Abschnitt beschriebenen Aktionsabfragen hatten allein die Veränderung von
Daten zum Ziel, ohne dass diese Daten gelesen werden mussten. Falls Sie aber Daten anzeigen und satz-
weise editieren wollen, kommen Sie um einen Datentransport zwischen Client und Server (und um einen
Cursor!) nicht herum. Auf dem Clientrechner stehen die Daten dann als Recordsets für eine Bearbeitung
zur Verfügung).
Versuchen Sie möglichst viele Datenoperationen über Aktionsabfragen abzuwickeln, da dies im Allgemeinen
schneller geht und die Netzbelastung niedrig hält. Recordsets hingegen sollten Sie nur in den wirklich notwendigen Fällen
verwenden.
Ein Recordset-Objekt kann auf drei verschiedene Arten zugewiesen werden:
Durch die Execute-Methode des Connection-Objekts
Durch die Execute-Methode des Command-Objekts
Durch seine eigene Open-Methode
Bevor ein Recordset erzeugt werden kann, muss in der Regel eine Verbindung (Connection-Objekt) geöffnet
sein
1
, wobei jedes der drei Verfahren die Verbindungsinformation auf andere Weise bezieht.
Recordset öffnen mit Connection.Execute
Set rs = conn.Execute(CommandText, [RecordsAffected], [Options])
Alle von der Ausführung erzeugten Datensätze werden in einem Recordset-Objekt gespeichert. Nach
Abschluss dieser Operation wird ein ExecuteComplete-Ereignis ausgelöst.
1
Ausnahmen sind z.B. ungebundene Recordset-Objekte, die nur im Arbeitsspeicher existieren.
376
BEISPIEL
HINWEIS
BEISPIEL
HINWEIS
Die Argumente:
CommandText
Zeichenkette mit der auszuführenden SQL-Anweisung (oder Tabellennamen, Stored Procedure oder
ein vom Provider bestimmter Befehl).
RecordsAffected
In dieser Long-Variablen gibt der Provider die Anzahl von Datensätzen zurück, auf die sich die Opera-
tion ausgewirkt hat.
Options
Dieser Long-Wert gibt an, wie der Provider das CommandText-Argument interpretieren soll (adCmd-
Text, adCmdTable, adCmdStoredProc, adCmdUnknown).
Das Gehalt aller Personen, die mehr als 2.000
verdienen, wird um 100
gekürzt. Die Anzahl dieser Perso-
nen wird in einem Meldungsfenster angezeigt.
Dim rs As New Recordset
Dim sql As String, anzahl As Integer
sql = "UPDATE personen SET gehalt = gehalt-100 WHERE gehalt > 2000"
Set rs = conn.Execute(sql,anzahl,adCmdText)
MsgBox Str$(anzahl)
Recordset öffnen mit Command.Execute
Die Command.Execute-Methode verwendet das Connection-Objekt, das in der ActiveConnection-Eigenschaft
des Command-Objekts gesetzt ist.
Die Syntax:
Set rs = cmd.Execute(RecordsAffected, Parameters, Options)
Die Befehlszeichenkette ist vorher in der CommandText-Eigenschaft des Command-Objekts anzugeben, sie
kann Parametersymbole (? oder [par]) enthalten, die erst bei Ausführung durch den entsprechenden Parameter im Parameters-
Argument ersetzt werden.
Das Recordset wird mit Anrede und Nachnamen aller Personen gefüllt, die im Raum
E1
sitzen (Datenbank
Personal.accdb
).
Dim cmd1 As New Command
cmd1.CommandText = "SELECT personen.Anrede, Personen.Nachname FROM Personen " & _
"INNER JOIN Raeume ON Personen.RaumNr = Raeume.Nr WHERE Raeume.Raum = ?"
Set cmd1.ActiveConnection = conn ' existierende Verbindung zuweisen
Dim rs As New Recordset
Set rs = cmd1.Execute(,"E1", adCmdText)
Genaue Anleitungen für die Arbeit mit SQL-Anweisungen finden Sie im Kapitel 8.
377
ADO-Grundoperationen
Kapitel 7: ADO-Programmierung
Recordset öffnen mit Recordset.Open
Die wohl am häufigsten benutzte Recordset.Open-Methode benötigt entweder eine Verbindungszeichenfol-
ge oder einen Connection-Objektoperanden, oder sie verwendet das Connection-Objekt, das in der Active-
Connection-Eigenschaft gesetzt ist.
rs.Open [Source], [ActiveConnection], [CursorType], [LockType], [Options]
Bei den zahlreichen (optionalen) Argumenten sticht deren Vielgestaltigkeit ins Auge:
Source kann eine Zeichenfolge (SQL-String etc.), ein Command-Objekt oder sogar der Dateinamen ei-
nes auf Festplatte gespeicherten Recordsets sein!
ActiveConnection ist entweder eine geöffnete Connection-Objektvariable oder eine Zeichenkette, wie sie
der ConnectionString-Eigenschaft entspricht.
CursorType bezeichnet den Type des Cursors, den der Provider beim Öffnen des Recordsets verwendet
(adOpenForwardOnly, adOpenKeyset, adOpenDynamic, adOpenStatic, siehe folgende Tabelle).
LockType bestimmt das Sperrverhalten des Providers beim Öffnen des Recordsets (adLockReadOnly,
adLockPessimistic, siehe übernächste Tabelle).
Options gibt an, wie Provider das Source-Argument interpretieren soll, falls dies kein Command-Objekt
ist (adCmdText, adCmdTable etc.).
Bei den folgenden Übersichten ist zu beachten, dass einige Argumente der Open-Methode alternativ auch
als Eigenschaften eines Recordset-Objekts zugewiesen werden können.
Konstante Bedeutung
adOpenForwardOnly Vorwärts-Cursor (Default). Entspricht statischem Cursor, ein Blättern durch die Datensätze ist allerdings nur
in Vorwärtsrichtung möglich.
adOpenDynamic Dynamischer Cursor (Originalzugriff auf Datensätze). Von anderen Personen vorgenommene Hinzu-
fügungen, Änderungen und Löschvorgänge werden angezeigt.
adOpenStatic Statischer Cursor (statische Kopie von Datensätzen). Von anderen Benutzern vorgenommene Hinzu-
fügungen, Änderungen oder Löschvorgänge können nicht angezeigt werden.
adOpenKeyset Keyset-Cursor (Mittelding zwischen dynamischem und statischem Cursor). Von anderen Personen vorge-
nommene Datenänderungen können weiterhin angezeigt werden, hinzugefügte bzw. gelöschte Datensätze
jedoch nicht.
Tabelle 7.1 Werte für CursorType (Argument bzw. Eigenschaft)
Konstante Bedeutung
adLockReadOnly Provider erlaubt nur Lesezugriff (Default)
adLockPessimistic Provider sperrt während der Bearbeitung Datensätze vollständig
adLockOptimistic Provider sperrt während der Bearbeitung die Datensätze nur dann, wenn Update-Methode aufgerufen wird
adLockBatchOptimistic Optimistische Stapelaktualisierung im Stapelmodus (sonst Direktmodus, d.h. sofortige Aktualisierung der
Datensätze)
adLockUnspecified Keine spezifische Sperrung. Kopien erhalten den gleichen Locktype wie das Original.
Tabelle 7.2 Werte für LockType (Argument bzw. Eigenschaft)
378

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.