Bemerkungen
Um den Programmieraufwand gering zu halten, wurde der Open-Methode des Recordset-Objekts eine
Verbindungszeichenfolge übergeben und auf ein Connection-Objekt verzichtet.
Sie werden feststellen, dass die angezeigten Daten schreibgeschützt sind. Eine verbesserte Lösung finden
Sie im Praxisbeispiel »Ein intelligentes ADO-Frontend entwickeln« (Seite 403).
Ein ADO-Datenklassenmodul verwenden
Recordset-Objekt: WithEvents-Deklaration, MoveComplete-Ereignis; Command-Objekt: Execute-Methode,
CommandText-, CommandType-, ActiveConnection-Eigenschaft; Property-Prozeduren; Parameter; Listen-
feld;
Ein herausragendes ADO-Feature ist die Tatsache, dass auch ADO-Recordsets als Eigenschaften von Klas-
senmodulen in Erscheinung treten können. Dadurch sind gewisse Voraussetzungen für eine zeitgemäße ob-
jektorientierte Programmierung unter Berücksichtigung eines Dreischichtenmodells (Three Tier Model)
gegeben. Das bedeutet im einfachsten Fall, dass die oberste Schicht (Benutzerschnittstelle/Frontend) mög-
lichst »dumm« sein kann, während die »Intelligenz« des Programms in der darunter liegenden Schicht (Ge-
schäftsobjekte) steckt und diese wiederum auf die unterste Schicht (Datenbank/Backend) zugreift.
Zwar lassen sich unter VBA keine echten verteilten Anwendungen erzeugen (echte ActiveX-DLL-Projekte
sind nicht möglich)
1
, aber auch die »nur« interne Verwendung von Datenklassenmodulen trägt zur Er-
höhung der Übersichtlichkeit und objektorientierten Programmierkultur bei.
Quelltext für Klassenmodul CData
Wählen Sie den Menübefehl
Einfügen/Klassenmodul
und richten Sie anschließend über den Menübefehl
Extras/Verweise...
eine Referenz auf die
Microsoft ActiveX Data Objects 2.8 Library
ein. Ändern Sie über den
Eigenschaftendialog den Standardnamen
Klasse1
in
CData.
Private conPers As Connection
Private comm As Command
Private rsPerson As Recordset
Private WithEvents rsRaum As Recordset
Die Eigenschaften der Klasse:
Public Property Get person() As Recordset ' Read-only!
Set person = rsPerson
End Property
Public Property Get raum() As Recordset
Set raum = rsRaum
End Property
Public Property Let raum(rm As Recordset)
Set rsRaum = rm
End Property
1
ActiveX-DLLs können Sie aber zum Beispiel in Visual Basic 6 realisieren.
401
Praxisbeispiele
Kapitel 7: ADO-Programmierung
Die Methoden der Klasse:
Public Sub nextRaum()
rsRaum.MoveNext
If rsRaum.EOF Then rsRaum.MoveLast
End Sub
Public Sub previousRaum()
rsRaum.MovePrevious
If rsRaum.BOF Then rsRaum.MoveFirst
End Sub
Beim Initialisieren der Klasse wird die Verbindung zur Datenquelle eingerichtet, anschließend werden die
weiteren Objekte (
Command
und
Recordset
) instanziert und zugewiesen:
Private Sub Class_Initialize()
Set conPers = New Connection
With conPers
.CursorLocation = adUseClient
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open CurrentProject.Path & "\Personal.accdb"
End With
Set comm = New Command
comm.CommandText = "SELECT * FROM Personen WHERE RaumNr = ? ORDER BY Nachname"
comm.CommandType = adCmdText
Set comm.ActiveConnection = conPers
Set rsPerson = New Recordset
Set rsRaum = New Recordset
rsRaum.Open "SELECT * FROM Raeume ORDER BY Raum", conPers, adOpenStatic, adLockOptimistic
End Sub
Da wir das
Recordset
-Objekt
rsPerson
mit
WithEvents
deklariert haben, steht uns der folgende Event-Handler
zur Verfügung, in welchem die Datensätze von Master- und Detailtabelle synchronisiert werden:
Private Sub rsRaum_MoveComplete(ByVal adReason As EventReasonEnum, ByVal pError As Error, _
adStatus As EventStatusEnum, ByVal pRecordset As Recordset)
Set rsPerson = comm.Execute(Parameters:=pRecordset!Nr)
End Sub
Oberfläche
Wir brauchen lediglich zwei Textfelder und und ein Listenfeld (alle ungebunden) sowie drei Befehlsschalt-
flächen (siehe Laufzeitabbildung am Ende des Beispiels).
Quelltext für Formular
Typisch für ein sauber programmiertes Frontend ist, dass Sie nicht mehr mit ADO-Interna belästigt werden:
Private datObj As CData ' Referenzieren der Klasse
Nun kann es losgehen:
Private Sub Form_Load()
Set datObj = New CData ' Instanzieren des Objekts
402

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.