Access und DAO 3.6: „Fehler beim Laden einer DLL“ verstehen

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 Database oder Dim rs As Recordset bricht 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 LibraryMicrosoft Office xx.0 Access Database Engine Object Libraryneuer Verweisname
DAO.DatabaseDAO.Databaseidentisch
DAO.RecordsetDAO.Recordsetidentisch
DAO.QueryDefDAO.QueryDefidentisch
DAO.TableDefDAO.TableDefidentisch
DAO.FieldDAO.Fieldidentisch
DAO.IndexDAO.Indexidentisch
DAO.RelationDAO.Relationidentisch
DAO.WorkspaceDAO.Workspacewird seltener genutzt, aber vorhanden
Jet-spezifische Eigenschaftenentfallenmanche 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

  1. Immer frühzeitig DAO explizit deklarieren
    Beispiel: Dim db As DAO.Database Dim rs As DAO.Recordset So gibt es keine Konflikte mit ADO oder anderen Libraries.
  2. 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.
  3. Code von Altprojekten migrieren
    Falls Du noch .MDE oder .MDB mit 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

Kategorien: