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

MerkmalDAOADO
Beste DatenquelleAccess lokalSQL Server, ODBC, Azure
Geschwindigkeit (lokal)HochNiedriger
Geschwindigkeit (remote)SchwächerBesser
TransaktionenEingeschränktBesser steuerbar
Unterstützung für ParameterNein (nur Workarounds)Ja, sauber über Command
LernkurveFlach (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.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert