HINWEIS
Ereignis Wird ausgelöst, wenn ...
FetchProgress,
FetchComplete
die Datenabrufoperation fortschreitet oder beendet wird.
WillChangeField,
FieldChangeComplete
sich der Wert des aktuellen Feldes ändert oder geändert hat.
WillMove,MoveComplete,
EndOfRecordset
sich die aktuelle Zeilenposition ändert, geändert hat oder das Ende des Recordset erreicht wurde.
WillChangeRecord,
RecordChangeComplete
sich Daten in der aktuellen Zeile eines Recordset ändern oder geändert haben.
WillChangeRecordset,
RecordsetChangeComplete
sich Daten im aktuellen Recordset ändern oder geändert haben.
Tabelle 7.19 Ereignisse des Recordset-Objekts
Praxisbeispiele
Die Beispiele dieses Abschnitts sollen gemäß dem Prinzip »So viel wie nötig« lediglich die prinzipielle Funktion
des ADO-Objektmodells verdeutlichen. Sie beziehen sich deshalb auf lokale Access-Datenbanken (.accdb, .mdb), sind also keine
Datenbank-Projekte (.adp). Dadurch kommt es teilweise zu Einschränkungen, wie z.B. fehlende Schreibrechte. Zur umfassenden
praktischen Entfaltung kommt ADO erst im Zusammenspiel mit dem SQL-Server (bzw. seiner Desktop-Version), wobei Daten-
bank-Projekte (.adp) zugrunde liegen (siehe Kapitel 9 und 10).
Mit ADO auf eine Access-Datenbank zugreifen
ADO-Recordset-Objekt: ConnectionString-Eigenschaft, Open-Methode; Form-Objekt: Recordset-Eigenschaft;
In diesem einführenden Beispiel wollen wir mit ADO auf eine lokale Datenbank (.accdb) zugreifen. Es han-
delt sich um eine einfache zweischichtige Anwendung, bei welcher die Eingabemaske (Frontend) in einer
separaten .accdb-Datei enthalten ist.
Oberfläche
Wir erzeugen ein neues Formular und gestalten damit eine ungebundene Eingabemaske für einige Felder
der Tabelle Personen (siehe Laufzeitabbildung am Schluss des Beispiels), die aus einer zweiten Datenbank
Personal.accdb stammt. Das Anbinden an diese Datenbank, welche sich im gleichen Verzeichnis befindet,
erledigen wir erst später per Code.
Wir wechseln in den VBA-Editor, entfernen über den Menübefehl Extras/ Verweise... das Häkchen bei
Microsoft Office 12.0 Access database engine Object Library (bzw. Microsoft DAO 3.6 Object Library) und refe-
renzieren stattdessen die Microsoft ActiveX Data Objects 2.8 Library.
Quelltext
Dreh- und Angelpunkt ist eine ADO-Recordset-Objektvariable:
Private rs As ADODB.Recordset
399
Praxisbeispiele
Kapitel 7: ADO-Programmierung
Die folgende Routine stellt die Verbindung zur Datenbank her, öffnet das ADO-Recordset-Objekt und
»klemmt« die Textfelder an die gewünschten Datenbankfelder:
Private Sub Befehl0_Click()
Dim connStr As String
Dim verz As String
verz = Application.CurrentProject.Path & "\Personal.accdb"
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & verz & _
"; Mode=Share Deny Read|Share Deny Write;Persist Security Info=False"
Liegt die externe Datenbank noch im »alten« (
*.mdb
)-Format vor, so sind die beiden vorhergehenden An-
weisungn wie folgt zu ersetzen:
verz = Application.CurrentProject.Path & "\Personal.mdb"
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & verz
Nun endlich geht's zur Sache:
Set rs = New ADODB.Recordset
rs.Open "Personen", connStr, adOpenStatic, adLockOptimistic
Set Me.Recordset = rs
Das Anbinden der Steuerelemente (ist leider im Eigenschaftenblatt nicht mehr möglich):
Text0.ControlSource = "Nr"
Text1.ControlSource = "Vorname"
Text2.ControlSource = "Nachname"
Text3.ControlSource = "Geburtstag"
Text4.ControlSource = "Gehalt"
End Sub
Test
Nach Programmstart klicken Sie zunächst auf die »Verbinden«-Schaltfläche, um anschließend durch die
externe Datenbanktabelle zu blättern.
Abbildung 7.6 ADO-Zugriff auf eine externe Access-Datenbank
400

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.