Viele Access-Entwickler stolpern irgendwann über diese Meldung:
„Fehler beim Laden einer DLL“, wenn man in den Verweisen die Microsoft DAO 3.6 Object Library aktivieren will.
Das wirkt erst einmal kryptisch, hat aber eine simple Ursache: DAO 3.6 ist tot.
Warum tritt der Fehler auf?
DAO 3.6 stammt aus Zeiten von Access 97/2000/2003. Es basiert auf DAO360.DLL, die damals mit dem alten Jet-Datenbankmodul kam. Spätestens seit Office 2007 gibt es aber kein Jet mehr, sondern die ACE Engine (Access Connectivity Engine).
Mit den 64-Bit-Versionen von Office ist endgültig Schluss:
- DAO 3.6 ist nur 32-Bit.
- Die DLL lässt sich in modernen Office-Versionen nicht mehr laden.
- Wer es trotzdem versucht, bekommt den bekannten Fehler.
Welche Library stattdessen?
Seit Access 2007 gehört DAO fest zu ACE. Du findest sie unter dem Namen:
Microsoft Office xx.0 Access Database Engine Object Library
(xx = 12.0, 14.0, 15.0, 16.0 – je nach Office-Version)
Das ist die offizielle DAO-Nachfolgerin und 100% kompatibel zu Deinem VBA-Code.
Typische Symptome bei Keyusern
- Alte Access-MDE/MDB meldet plötzlich Fehler auf einem neuen PC mit Office 365/2021.
- Verweis auf „DAO 3.6“ steht auf „Fehlend“.
- Code wie
Dim db As DatabaseoderDim rs As Recordsetbricht ab.
Für Anwender sieht das so aus, als sei „Access kaputt“. Tatsächlich muss nur der Verweis umgestellt werden.
Mapping: Von DAO 3.6 zu aktueller DAO
Die gute Nachricht: Fast alles bleibt gleich. Die Objekte heißen identisch. Nur der Name der Bibliothek hat sich geändert.
| DAO 3.6 (alt) | DAO 12–16 (neu) | Bemerkung |
|---|---|---|
| Microsoft DAO 3.6 Object Library | Microsoft Office xx.0 Access Database Engine Object Library | neuer Verweisname |
| DAO.Database | DAO.Database | identisch |
| DAO.Recordset | DAO.Recordset | identisch |
| DAO.QueryDef | DAO.QueryDef | identisch |
| DAO.TableDef | DAO.TableDef | identisch |
| DAO.Field | DAO.Field | identisch |
| DAO.Index | DAO.Index | identisch |
| DAO.Relation | DAO.Relation | identisch |
| DAO.Workspace | DAO.Workspace | wird seltener genutzt, aber vorhanden |
| Jet-spezifische Eigenschaften | entfallen | manche Jet-Spezialfunktionen sind nicht mehr da |
Die Anpassung ist also in 99% der Fälle nur: alten Verweis löschen, neuen aktivieren.
Best Practices für Entwickler
- Immer frühzeitig DAO explizit deklarieren
Beispiel:Dim db As DAO.Database Dim rs As DAO.RecordsetSo gibt es keine Konflikte mit ADO oder anderen Libraries. - 64-Bit testen
Spätestens wenn Office in 64-Bit installiert ist, fliegt DAO 3.6 komplett raus. Prüfe Deinen Code daher auch in dieser Umgebung. - Code von Altprojekten migrieren
Falls Du noch.MDEoder.MDBmit Verweis auf DAO 3.6 auslieferst: unbedingt umstellen, sonst laufen die Anwendungen bei Kunden mit neuer Hardware/Office nicht mehr.
Fazit
DAO lebt – aber nicht mehr als Version 3.6.
Wer heute mit Access arbeitet, sollte konsequent auf die Office Access Database Engine Object Library setzen. Damit bist Du zukunftssicher, egal ob 32- oder 64-Bit.
Und wenn wieder einer im Forum fragt, warum Access „seine DLL vergessen“ hat: ruhig bleiben, Verweis tauschen – und weiter geht’s.
Nicht Access ist das hier Problem, sondern wir Entwickler, die manchmal zu lange an alten Libraries festhalten.
Sönke Schäfer, Access-Entwickler und Datenschäfer bei SeSoft GmbH