Methoden des Datenzugriffes unter MS-Access,VBA und DAO

wilhelm.moser@demos.at 2003-06-13

 

download ms_access_datenzugriffsmethoden.zip (51 kb) 

 

Abstract

Ziel dieses Dokumentes ist es, Einsteigern in das Programmieren mit Access eine kurze Anleitung zur Manipulation mit Daten zur Verfügung zu stellen.

 

Die Verwendung von DAO (Data Access Objects)

DAO wird von Microsoft nicht mehr als Datenzugriffsmethode empfohlen da DAO direkt die Microsoft Jet Engine anspricht. Als Ersatz dafür sind die ADO (Active Date Objects vorgesehen) die über die MSDE (Microsoft Developer Engine, die eine kostenfrei bei Microsoft zu beziegende MS-SQL Serverumgebung ist) die Datenanbindung vornimmt.

Allerdings ist für den Einsteiger die Datenbindung mit DAO leichter nachvollziehbar und die Implementierung des Codes einfacher.

Bitte beachten Sie, dass Sie unbedingt die Microsoft DAO X.XX Library unter Verweise einbinden müssen. Sie finden die Verweise NICHT direkt in Access sondern Sie müssen zuerst in Access ein neues Modul erstellen oder ein Modul öffnen. Dann gelangen sie automatisch in ein weiteres Programm, den sogenannten Microsoft Visual Basic Editor der eigentlich Mircrosoft Visual Basic for Applications Editor heißen sollte da der Visual Basic Editor in Visual Studio integriert ist und eine eigene Entwicklerplattform darstellt.

Wenn Sie außerdem Microsoft ActiveX Data Objects X.X Library eingebunden haben müssen Sie unbedingt die Deklaration Dim rs as ADO.Recordset verwenden!

 

GEBUNDENE und UNGEBUNDENE Daten

Gebunden sind Daten  wenn die Felder des Formulars den Feldnamen enthalten UND in den Eigenschaften des Formulars die Datenherkunft (Recordsource) nicht leer ist. (Me.Recordsource = "SELECT Name, Vorname FROM Adressen")

Ungebunden sind Daten wenn die Felder des Formulars „ungebunden sind“ UND in den Eigenschaften des  Formulars die Datenherkunft (Recordsource) leer ist.

 

UNGEBUNDENE DATEN MIT VBA und DAO (Data Access Objects)

Um mit VBA-Code ohne etwaige Einschränkungen von Access – d. H. Überprüfungen die eventuell die Behandlung der Daten durch VBA-Code stören arbeiten zu können  ist bei der Daten Ein- und Ausgabe die ungebundene Form sinnvoller.

Das bedeutet aber, dass die Daten jeweils GELADEN, GEPRÜFT und GESPEICHERT werden müssen. Dazu dient das Objekt Recordset – des einer Tabelle im Arbeitsspeicher entspricht.

Um ein Recordset zu erstellen muss dieses im Kopf des Modules deklariert werden UND es muss die Datenbank, da angesprochen werden soll, ebenfalls deklariert sein:

Dim db as Database
Dim rs as DAO.Recordset

‘wir setzen das Objekt db (Datenbank) auf die derzeitige Datenbank
Set db = DBEngine (0) (0)
'und setzen das Recordset das mit Hilfe des SQL-Strings (SELECT) mit den Daten aus der Datenbank befüllt wird
'(dbOpendynaset heißt das gelesen und geschrieben werden kann )

Set rs = db.Openrecordset ("SELECT Name, Vorname FROM Adressen", dbOpenDynaset)

'Damit sind die Daten in dem Objekt Recordset und im Arbeitsspeicher.
'In der Regel wissen wir aber nicht ob das Recordset Daten enthält.
'(rs.Recordcount liefert uns 0 oder 1 ob Daten vorhanden sind oder nicht)
'üblicherweise jedoch verarbeiten wir das Recordset mit der While Anweisung

While not rs.EOF (End Of File)

txtName = Rs!Name
txtVorname = Rs!Vorname
Rs.Movenext
‘wir müssen IMMER zum nächsten Datensatz gehen um das Dateiende erreichen zu können,
'andernfalls hängt sich ACCESS auf!!!

Wend

'
Soweit zum LESEN der Daten. Beim Schreiben gibt’s 2 Fälle
'Neuen Datensatz Hinzufügen  

Rs.Addnew

'Vorhandenen Datensatz bearbeiten  

Rs.Edit

'Nach dem Befüllen des Recordsets mit der umgekehrten Anweisung wie beim Laden:

 Rs!Name = txtName

'MUSS in beiden Fällen der Datensatz des Recordsets in die Tabelle gespeichert werden.
'Das erfolgt mit der Anweisung.

 Rs.Update

 

'Nach dem Arbeiten mit db und rs müssen beide wieder ordnungsgemäß GESCHLOSSEN werden

Rs.close
Db.close

 '(Bitte in dieser Reihenfolge!!!)

 'Und dann müssen die Objekte db und Rs noch dereferenziert werden um sicher aus dem Arbeitsspeicher entfernt zu werden

Set rs = Nothing
Set db = Nothing

Das ist alles und für die Datenmanipulation DAS Wichtigste. ALLE Daten werden über diverse Programmiersprachen oder Zugriffsmethoden IMMER so geladen und gespeichert – die Sprachsyntax ändert sich, nicht aber die Methode.