Worum geht’s eigentlich?
In Access hast Du zwei Datenzugriffsmodelle:
- DAO (Data Access Objects) – das „eingebaute“ Modell für Access-Datenbanken
- ADO (ActiveX Data Objects) – flexibler, aber eher SQL-Server-orientiert
Beides funktioniert – aber nicht gleich gut.
Ich zeig Dir, wann was sinnvoll ist.
Grundregel
DAO für Access (JET/ACE), ADO für alles andere.
Wenn Du gegen CurrentDb
arbeitest: nimm DAO.
Wenn Du SQL Server, ODBC oder REST-Zugriffe brauchst: ADO.
DAO – klassisch, schnell, lokal
Vorteile
- Voll integriert in Access
- Zugriff auf Formulare, Recordsets, Tabellen
- Schnell bei lokalen .accdb/.mdb
- Funktioniert auch ohne Referenz (über
CurrentDb
)
Beispiel
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Kunden WHERE Aktiv = True", dbOpenDynaset)
Do Until rs.EOF
Debug.Print rs!Name
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
ADO – modern, flexibel, Server-freundlich
Vorteile
- Schneller bei reinen Lesezugriffen auf SQL Server
- Unterstützt
Command
, Parameter, Transaktionen - Besser für verteilte Systeme, Netzwerkzugriffe
- Nutzt Connection-Objekte (auch zu Azure SQL etc.)
Beispiel
Dim conn As Object ' ADODB.Connection
Dim rs As Object ' ADODB.Recordset
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=DEINSQLSERVER;Initial Catalog=DeineDB;Integrated Security=SSPI;"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM Kunden WHERE Aktiv = 1", conn, 1, 1 ' 1 = adOpenKeyset, 1 = adLockReadOnly
Do Until rs.EOF
Debug.Print rs("Name")
rs.MoveNext
Loop
rs.Close: conn.Close
Gegenüberstellung DAO vs ADO
Merkmal | DAO | ADO |
---|---|---|
Beste Datenquelle | Access lokal | SQL Server, ODBC, Azure |
Geschwindigkeit (lokal) | Hoch | Niedriger |
Geschwindigkeit (remote) | Schwächer | Besser |
Transaktionen | Eingeschränkt | Besser steuerbar |
Unterstützung für Parameter | Nein (nur Workarounds) | Ja, sauber über Command |
Lernkurve | Flach (Access-Nutzer) | Etwas steiler |
Typische Fehler
- DAO-Referenz fehlt →
Compile Error
- DAO und ADO gemischt → Konflikte bei
Recordset
Dim rs As Recordset
ist zu ungenau → immer explizit benennen
' Falsch:
Dim rs As Recordset ' Was ist das jetzt? DAO oder ADO?
' Richtig:
Dim rs As DAO.Recordset
Mein Tipp
Wenn Du innerhalb von Access arbeitest und Daten lokal hältst → DAO.
Wenn Du mit SQL Server, Azure oder ODBC arbeitest → ADO.
Wenn Du beides brauchst – nimm beide.
Aber halt sie strikt getrennt. Kein Mischmasch.
Und immer schön aufräumen.
Sonst hast Du schneller tote Connections als kalten Kaffee.
No responses yet