Kapitel 37
Datenzugriff mit ADO
790
Connections
Zu einer Datenbank muss zuerst eine Verbindung, eine
Connection
, aufgebaut werden, beispiels-
weise mit
Beachten Sie das Befehlswort
New
in der Dimensionierungsanweisung, denn es ist notwendig, vor
dem Öffnen einer Verbindung ein
Connection
-Objekt neu zu erzeugen.
In diesem Kapitel beschränken wir uns auf die Verbindung, die Access für den Zugriff auf die aktuelle
Datenbank zur Verfügung stellt und werden nicht weiter auf die
Open
-Methode eingehen.
CurrentProject
ist ein Verweis auf die aktuelle Datenbank. Die Eigenschaft
Connection
enthält den
Verweis auf das entsprechende
Connection
-Objekt. Hierbei muss kein neues Objekt erzeugt werden,
deshalb kann beim
Dim
-Befehl auf
New
verzichtet werden.
Recordsets
Einem Recordset liegt immer eine Tabelle, eine Abfrage oder direkt ein SQL-Befehl zugrunde. Jedes
Recordset erhält aufgrund der Datenbasis entsprechende Felder, die in einer
Fields
-Auflistung ver-
waltet werden.
Ein
Recordset
wird mithilfe des Befehls
Open()
geöffnet.
Der CursorType-Parameter
Der
CursorType
eines Recordsets kann mithilfe einer der in der folgenden Tabelle aufgeführten
Konstanten festgelegt werden.
Dim conn As New ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data
Source=C:\Users\Natascha\Documents\Kinocenter\Kinoprogramm\CineCity.accdb;” & _
“User ID=Admin;"
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
Dim rs As New ADODB.Recordset
rs.Open Quelle, ActiveConnection, CursorType, LockType, Options
Tabelle 37.2
Recordset-Typen
Konstante Beschreibung
adOpenKeyset
Ein Recordset vom Typ
Keyset
(Schlüsselgruppe) besteht aus Zeigern auf
die Daten von Tabellen oder Abfragen, d.h., es wird nur ein eindeutiger
Schlüssel für jeden Datensatz in den lokalen Speicher geladen. Die Daten
können editiert werden.
adOpenDynamic
Ein Recordset dieses Typs verhält sich ähnlich wie ein
Keyset
. Für Access-
Datenbanken werden dynamische Recordsets als
Keyset
definiert.
Recordsets
791
Programmierung
Der LockType-Parameter
Wenn mehrere Benutzer gleichzeitig versuchen, Daten einer Tabelle zu verändern, kann es vorkom-
men, dass zwei Benutzer den gleichen Datensatz gleichzeitig ändern. Um zu vermeiden, dass die
Benutzer sich gegenseitig die Daten überschreiben, kann durch den Einsatz von Sperren, Locks, der
Zugriff organisiert werden. Der
LockType
-Parameter muss daher eigentlich nur angegeben werden,
wenn Sie die Daten des Recordsets verändern möchten, allerdings auch dann, wenn nur ein Benutzer
auf die Daten zugreift. In Kapitel 41, »Einsatz in Mehrbenutzerumgebungen«, werden die verschiede-
nen
Locking
-Konstanten ausführlich beschrieben. In diesem Kapitel verwenden wir immer die Kon-
stante
adLockOptimistic
.
Verwenden Sie als
LockType
eine der Konstanten
adLockOptimistic, adLockBatch-
Optimistic
oder
adLockPessimistic
, so wird automatisch ein Recordset vom
CursorType
adOpen-
Keyset
verwendet.
Der Options-Parameter
Der optionale Parameter
Options
ermöglicht Ihnen, den Inhalt des Parameters
Quelle
genauer zu
bestimmen, um so ADO bei der Auswertung behilflich zu sein. Durch die Angabe des Parameters
muss ADO nicht die Auswerteroutinen durch Analyse von
Quelle
selbst festlegen.
adOpenStatic
Ein statisches Recordset enthält eine Kopie der Daten zu einem bestimmten
Zeitpunkt (snapshot). Änderungen durch andere Benutzer, die nach der
Erstellung des Recordsets aufgetreten sind, werden nicht berücksichtigt.
adOpenForwardOnly
Ein Recordset dieses Typs verhält sich wie ein statisches Recordset, kann
aber nur von vorne nach hinten durchlaufen werden
Tabelle 37.2
Recordset-Typen
(Fortsetzung)
Konstante Beschreibung
Tabelle 37.3
Locking
-Konstanten
Konstante Beschreibung
adLockBatchOptimistic
Verwendet eine optimistische Sperrmethode bei Sammelaktualisierungen
adLockReadOnly
Dies ist der Standardwert. Die Daten des Recordsets können nicht verändert
werden.
adLockOptimistic
Die Daten des Recordsets können geändert werden, wobei die optimistische
Sperrmethode eingesetzt wird
adLockPessimistic
Die Daten des Recordsets können geändert werden, wobei die
pessimistische Sperrmethode eingesetzt wird
HINWEIS
Tabelle 37.4
Options
-Konstanten
Konstante Beschreibung
adCmdUnknown
Dies ist der Standardwert. ADO muss selbst bestimmen, wie das Argument
Quelle
ausgewertet wird.
adCmdText
Quelle
enthält eine Zeichenkette mit der entsprechenden SQL-Abfrage
Kapitel 37
Datenzugriff mit ADO
792
Einsatzbeispiele
Wir möchten Ihnen im Folgenden einige kleine Beispiele zum Öffnen von Recordsets geben. Zuerst
wird die Tabelle tblFilme mit den Standardeinstellungen geöffnet. Geben Sie keinen
CursorType
an,
so wird die Tabelle im Modus
adOpenForwardOnly
geöffnet. Wird auch kein
LockType
festgelegt, ist die
Tabelle schreibgeschützt, als
LockType
wird also
adLockReadOnly
verwendet.
CurrentProject
gibt einen Verweis auf das aktuell geöffnete Datenbankobjekt zurück, also auf die
Datenbank, in der die Programmzeilen ausgeführt werden.
Im zweiten Beispiel wird eine Tabelle zum Bearbeiten geöffnet. Die verschiedenen Möglichkeiten
des Lockings, also des Sperrens von Datensätzen insbesondere im Mehrbenutzerbetrieb, werden in
Kapitel 41 beschrieben.
Ein Recordset, dem eine gespeicherte Abfrage zugrunde liegt, öffnen Sie übrigens mit den gleichen
Befehlen, denn Abfragen und Tabellen werden an dieser Stelle gleich behandelt.
Die nächsten Zeilen laden die Daten der Tabelle tblFilme nach dem Filmtitel sortiert als statisches
Recordset (Snapshot), d.h., die Ergebnismenge im Recordset kann nicht verändert werden.
adCmdTable
Quelle
enthält den Namen einer Tabelle. ADO erstellt selbsttätig eine
SQL-Abfrage, die alle Zeilen mit allen Spalten der Tabelle zurückgibt.
adCmdTableDirect
Quelle
enthält den Namen einer Tabelle. Alle Zeilen und Spalten werden
direkt zurückgegeben.
adCmdStoredProc
Quelle
enthält den Namen einer gespeicherten Prozedur, in Access also
den Namen einer Abfrage.
adCmdFile
Quelle
enthält den Dateinamen eines dauerhaft gespeicherten
Recordset
Tabelle 37.4
Options
-Konstanten
(Fortsetzung)
Konstante Beschreibung
Dim rst As New ADODB.Recordset
rst.Open "tblFilme", CurrentProject.Connection
Dim rst As New ADODB.Recordset
rst.Open "tblWochen", ActiveConnection:=CurrentProject.Connection, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic
Dim rst As New ADODB.Recordset
rst.Open "SELECT * FROM tblFilme ORDER BY Filmtitel", _
ActiveConnection:=CurrentProject.Connection, _
CursorType:=adOpenStatic

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.