{"id":55001600,"date":"2026-06-01T00:00:00","date_gmt":"2026-03-17T07:21:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1600"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Die_DBEngineKlasse_der_DAOBibliothek","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/","title":{"rendered":"Die DBEngine-Klasse der DAO-Bibliothek"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da\" width=\"1\" height=\"1\" alt=\"\"><b>Wer in Access per VBA auf Datenbanken zugreift, nutzt meist die DAO-Bibliothek &#8211; oft ohne zu wissen, dass am Anfang der gesamten Objekthierarchie die &#8222;DBEngine&#8220; steht. Sie repr&auml;sentiert die Datenbank-Engine selbst und bietet Zugriff auf Arbeitsbereiche, Verbindungen und globale Einstellungen. Dieser Beitrag stellt die wichtigsten Eigenschaften und Methoden der DBEngine-Klasse vor und zeigt anhand praktischer Beispiele, wie Sie diese gewinnbringend einsetzen.<\/b><\/p>\n<h2>Die DAO-Objekthierarchie<\/h2>\n<p>Die DAO-Bibliothek (<b>Data Access Objects<\/b>) organisiert ihre Objekte in einer festen Hierarchie. An der Wurzel steht die <b>DBEngine<\/b>-Klasse. Sie ist kein Objekt, das Sie explizit instanziieren m&uuml;ssen &#8211; VBA stellt es Ihnen &uuml;ber die DAO-Bibliothek automatisch als globale Instanz bereit. Die Hierarchie lautet vereinfacht: <b>DBEngine<\/b> &#8211; <b>Workspace<\/b> &#8211; <b>Database<\/b> &#8211; <b>TableDef<\/b>\/<b>QueryDef<\/b>\/<b>Recordset<\/b>.<\/p>\n<p>Sie k&ouml;nnen <b>DBEngine<\/b> direkt ansprechen, ohne vorher ein Objekt zu deklarieren:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> DBEngine.Version<\/pre>\n<p>Alternativ k&ouml;nnen Sie auch eine explizit typisierte Variable verwenden. Das verbessert die IntelliSense-Unterst&uuml;tzung:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>dbe<span style=\"color:blue;\"> As <\/span>DAO.DBEngine\r\n<span style=\"color:blue;\">Set<\/span> dbe = DBEngine\r\n<span style=\"color:blue;\">Debug.Print<\/span> dbe.Version<\/pre>\n<h2>Wichtige Eigenschaften der DBEngine<\/h2>\n<p>Die <b>DBEngine<\/b>-Klasse stellt eine Reihe von Eigenschaften zur Verf&uuml;gung, &uuml;ber die Sie globale Einstellungen der Jet- bzw. ACE-Engine steuern k&ouml;nnen.<\/p>\n<h2>Version<\/h2>\n<p>Die Eigenschaft <b>Version<\/b> gibt die Versionsnummer der aktuell verwendeten DAO-Bibliothek als Zeichenkette zur&uuml;ck. Das ist n&uuml;tzlich, um zur Laufzeit zu ermitteln, mit welcher Engine die Anwendung arbeitet:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> DBEngine.Version 'z.B. \"16.0\"<\/pre>\n<p>Der zur&uuml;ckgegebene Wert bezieht sich auf die DAO-Version, nicht auf die Access-Version. F&uuml;r die Bibliothek <b>Microsoft DAO 3.6 Object Library <\/b>liefert sie beispielsweise den Wert <b>3.6<\/b>, f&uuml;r die heute verwendete <b>Microsoft Office 16.0 Access database engine Object Library <\/b>den Wert <b>16.0<\/b>. Damit l&auml;sst sich also einfach ermitteln, ob die alte oder die neue DAO-Bibliothek verwendet wird.<\/p>\n<h2>DefaultUser und DefaultPassword<\/h2>\n<p>Mit <b>DefaultUser<\/b> und <b>DefaultPassword<\/b> legen Sie fest, welche Anmeldedaten beim &Ouml;ffnen von Datenbanken ohne explizite Angabe von Benutzername und Kennwort verwendet werden.<\/p>\n<p>Diese Eigenschaften stammen noch aus der &auml;lteren Workgroup-Sicherheit von Access und sind in modernen Umgebungen kaum noch relevant, k&ouml;nnen aber beim Zugriff auf &auml;ltere gesicherte Datenbanken n&uuml;tzlich sein:<\/p>\n<pre>DBEngine.DefaultUser = \"Admin\"\r\nDBEngine.DefaultPassword = \"\"<\/pre>\n<p>Dies funktioniert nur mit der alten Workgroup-Security, die in <b>.mdb<\/b>-Dateien bis Access 2003 zum Einsatz kam, in <b>.accdb<\/b>-Dateien ist dies wirkungslos.<\/p>\n<h2>LoginTimeout<\/h2>\n<p>Die Eigenschaft <b>LoginTimeout<\/b> legt fest, wie viele Sekunden die Engine wartet, bevor ein Anmeldeversuch an einem ODBC-Server als fehlgeschlagen gilt. Der Standardwert betr&auml;gt 20 Sekunden.<\/p>\n<p>In der Praxis ist die Wirkung dieser Eigenschaft jedoch begrenzt: Moderne ODBC-Treiber wie der ODBC Driver 17 for SQL Server haben eigene interne Verbindungs- und Retry-Timeouts, die Vorrang vor dem hier gesetzten Wert haben. So kann es vorkommen, dass trotz eines gesetzten Werts von 2 Sekunden erst nach 10 oder mehr Sekunden eine Fehlermeldung erscheint, weil der Treiber seinen eigenen Zyklus durchl&auml;uft.<\/p>\n<p>Die Einstellung funktioniert auch nur f&uuml;r ODBC und andere externe Treiber, nicht f&uuml;r den direkten Zugriff &uuml;ber die ACE-Engine.<\/p>\n<p>Es gibt zwar in ADODB ebenfalls eine Eigenschaft, deren Name verhei&szlig;en l&auml;sst, dass man damit den Zeitpunkt eines Verbindungsabbruchs steuern k&ouml;nnte, jedoch funktioniert auch die dortige <b>ConnectionTimeout<\/b>-Eigenschaft nur bei einer sehr beschr&auml;nkten Menge von Konstellationen zuverl&auml;ssig. Das ist beispielsweise bei bestimmten falschen Angaben des Servernamens der Fall. In anderen Situationen schalten sich andere Automatismen dazwischen, die sich nicht durch die Einstellung der Zeit bis zum Verbindungsabbruch steuern lassen.<\/p>\n<h2>IniPath<\/h2>\n<p>Mit <b>IniPath<\/b> k&ouml;nnen Sie einen Registry-Pfad angeben, unter dem die Jet\/ACE-Engine ihre Konfiguration liest. Normalerweise liest die Engine ihre Einstellungen aus dem Standardpfad in der Windows-Registry.<\/p>\n<p>&Uuml;ber diese Eigenschaft k&ouml;nnen Sie einen alternativen Schl&uuml;ssel angeben, um Engine-Parameter wie Cache-Gr&ouml;&szlig;en oder Sperrmodi individuell zu konfigurieren. Dies ist ein fortgeschrittenes Thema, das haupts&auml;chlich f&uuml;r Mehrbenutzerumgebungen mit speziellen Anforderungen interessant ist.<\/p>\n<h2>SystemDB<\/h2>\n<p>Die Eigenschaft <b>SystemDB<\/b> gibt den Pfad zur aktuell verwendeten Arbeitsgruppeninformationsdatei (<b>.mdw<\/b>) an. Diese Eigenschaft ist ein Relikt der &auml;lteren Access-Sicherheitsarchitektur. In modernen Anwendungen ohne Workgroup-Sicherheit hat sie keine praktische Bedeutung mehr. Sie k&ouml;nnen sie lesen, um zu pr&uuml;fen, welche <b>.mdw<\/b>-Datei aktuell verwendet wird:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> DBEngine.SystemDB<\/pre>\n<h2>Workspaces-Auflistung<\/h2>\n<p>Die <b>Workspaces<\/b>-Auflistung enth&auml;lt alle aktuell ge&ouml;ffneten <b>Workspace<\/b>-Objekte.<\/p>\n<p>Standardm&auml;&szlig;ig enth&auml;lt sie genau einen Eintrag: den Standardarbeitsbereich <b>Workspaces(0)<\/b>. &Uuml;ber diesen gelangen Sie zur aktuellen Datenbank:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>ws<span style=\"color:blue;\"> As <\/span>DAO.Workspace\r\n<span style=\"color:blue;\">Set<\/span> ws = DBEngine.Workspaces(0)\r\n<span style=\"color:blue;\">Debug.Print<\/span> ws.Name 'Ausgabe: #Default Workspace#<\/pre>\n<h2>Wichtige Methoden der DBEngine<\/h2>\n<p>Neben den Eigenschaften bietet die <b>DBEngine<\/b>-Klasse mehrere Methoden, die direkt auf der Ebene der Engine operieren. Diese stellen wir in den folgenden Abschnitten vor.<\/p>\n<h2>OpenDatabase<\/h2>\n<p>Mit <b>OpenDatabase<\/b> &ouml;ffnen Sie eine Datenbankdatei und erhalten ein <b>Database<\/b>-Objekt zur&uuml;ck. Die Methode hat folgende Signatur:<\/p>\n<pre>DBEngine.OpenDatabase(Name, [Exclusive], [ReadOnly], [Connect])<\/pre>\n<p>Der Parameter <b>Name<\/b> gibt den Pfad zur Datenbankdatei an. <b>Exclusive<\/b> legt fest, ob die Datenbank exklusiv ge&ouml;ffnet werden soll, <b>ReadOnly<\/b> schr&auml;nkt den Zugriff auf Lesen ein.<\/p>\n<p>Der optionale Parameter <b>Connect<\/b> erm&ouml;glicht die &Uuml;bergabe einer Verbindungszeichenfolge f&uuml;r ODBC-Quellen.<\/p>\n<p>Ein typisches Beispiel: Sie m&ouml;chten aus VBA heraus eine externe Access-Datenbank &ouml;ffnen, um dort Daten zu lesen, ohne diese als verkn&uuml;pfte Tabelle einbinden zu m&uuml;ssen (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>DatenAusExternerDB()\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>strPfad<span style=\"color:blue;\"> As String<\/span>\r\n    strPfad = \"C:\\Daten\\Archiv.accdb\"\r\n    <span style=\"color:blue;\">Set<\/span> db = DBEngine.OpenDatabase(strPfad, False, <span style=\"color:blue;\">True<\/span>)\r\n    <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset( _\r\n        \"SELECT * FROM tblBestellungen\", dbOpenSnapshot)\r\n    <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n        <span style=\"color:blue;\">Debug.Print<\/span> rst!BestellNr\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    rst.Close\r\n    db.Close\r\n    <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Prozedur DatenAusExternerDB<\/span><\/b><\/p>\n<p>Beachten Sie: Die so ge&ouml;ffnete Datenbank ist von der aktuellen Access-Sitzung unabh&auml;ngig und muss am Ende explizit mit <b>Close<\/b> geschlossen und das Objekt auf <b>Nothing<\/b> gesetzt werden.<\/p>\n<h2>CreateWorkspace<\/h2>\n<p>Mit <b>CreateWorkspace<\/b> k&ouml;nnen Sie einen neuen Arbeitsbereich anlegen. In der Praxis spielt diese Methode heute vor allem noch f&uuml;r Jet-\/ACE-Arbeitsbereiche eine Rolle. Die Methode hat folgende Signatur:<\/p>\n<pre>DBEngine.CreateWorkspace(Name, UserName, Password, [UseType])<\/pre>\n<p>Der Parameter <b>UseType <\/b>legt den Typ des Arbeitsbereichs fest. Der Wert <b>dbUseJet <\/b>erstellt einen Jet-\/ACE-Arbeitsbereich. Der fr&uuml;here Wert <b>dbUseODBC <\/b>war f&uuml;r <b>ODBCDirect <\/b>vorgesehen, das in modernen DAO-Versionen nicht mehr unterst&uuml;tzt wird &#8211; die Verwendung f&uuml;hrt sogar zu einem Fehler (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1600_001.png\" alt=\"Die Verwendung von dbUseODBC f&uuml;hrt zu einem Fehler\" width=\"649,559\" height=\"466,9042\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Verwendung von dbUseODBC f&uuml;hrt zu einem Fehler<\/span><\/b><\/p>\n<p>Unabh&auml;ngig davon steht &uuml;ber <b>DBEngine.Workspaces(0) <\/b>immer der Standardarbeitsbereich zur Verf&uuml;gung, &uuml;ber den sich auch Transaktionen steuern lassen.<\/p>\n<h2>Transaktionen &uuml;ber Workspace steuern<\/h2>\n<p>&Uuml;ber <b>DBEngine.Workspaces(0) <\/b>k&ouml;nnen Sie auf den aktuellen Workspace zugreifen und dar&uuml;ber Transaktionen steuern. Transaktionen &uuml;ber dieses <b>Workspace<\/b>-Objekt sind besonders dann n&uuml;tzlich, wenn Sie sicherstellen m&ouml;chten, dass mehrere Schreiboperationen entweder vollst&auml;ndig oder gar nicht ausgef&uuml;hrt werden. Im Fehlerfall sorgt <b>Rollback<\/b> daf&uuml;r, dass keine halbfertigen &Auml;nderungen in der Datenbank verbleiben. Ein Beispiel sehen wir in Listing 2.<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>TransaktionMitWorkspace()\r\n    <span style=\"color:blue;\">Dim <\/span>ws<span style=\"color:blue;\"> As <\/span>DAO.Workspace\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Set<\/span> ws = DBEngine.CreateWorkspace(\"MeinWS\", \"Admin\", \"\", dbUseJet)\r\n    <span style=\"color:blue;\">Set<\/span> db = ws.OpenDatabase(CurrentDb().Name)\r\n    ws.BeginTrans\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> Fehler\r\n    db.Execute \"UPDATE tblArtikel SET Preis = Preis * 1.05 WHERE Kategorie = 'A'\", dbFailOnError\r\n    db.Execute \"INSERT INTO tblPreishistorie (Datum, Faktor) VALUES (Date(), 1.05)\", dbFailOnError\r\n    ws.CommitTrans\r\n    GoTo Ende\r\nFehler:\r\n    ws.Rollback\r\n    <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: Transaktion zur&uuml;ckgerollt.\"\r\nEnde:\r\n    db.Close\r\n    ws.Close\r\n    <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> ws = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Prozedur TransaktionMitWorkspace<\/span><\/b><\/p>\n<h2>CompactDatabase<\/h2>\n<p>Die Methode <b>CompactDatabase<\/b> komprimiert eine Datenbankdatei und erstellt dabei eine neue, optimierte Kopie.<\/p>\n<p>Da die Methode auf einer geschlossenen Datenbank operiert, kann sie nicht auf die aktuell ge&ouml;ffnete Datenbankdatei angewendet werden. Die Signatur lautet:<\/p>\n<pre>DBEngine.CompactDatabase(SrcName, DstName, [DstLocale], [Options], [SrcLocale])<\/pre>\n<p>Ein praktisches Einsatzszenario ist das Komprimieren einer externen Archivdatenbank, die nicht in der laufenden Access-Sitzung ge&ouml;ffnet ist:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>ArchivKomprimieren()\r\n    <span style=\"color:blue;\">Dim <\/span>strQuelle<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strZiel<span style=\"color:blue;\"> As String<\/span>\r\n    strQuelle = \"C:\\Daten\\Archiv.accdb\"\r\n    strZiel = \"C:\\Daten\\Archiv_kompakt.accdb\"\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> Fehler\r\n    DBEngine.CompactDatabase strQuelle, strZiel\r\n    Kill strQuelle\r\n    Name strZiel<span style=\"color:blue;\"> As <\/span>strQuelle\r\n    <span style=\"color:blue;\">MsgBox<\/span> \"Archivdatenbank erfolgreich komprimiert.\"\r\n    <span style=\"color:blue;\">Exit Sub<\/span>\r\nFehler:\r\n    <span style=\"color:blue;\">MsgBox<\/span> \"Fehler beim Komprimieren: \" & Err.Description\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur erstellt zun&auml;chst eine komprimierte Kopie unter einem tempor&auml;ren Namen, l&ouml;scht dann das Original mit <b>Kill<\/b> und benennt die Kopie mit <b>Name<\/b> um.<\/p>\n<p>Dieser Ablauf ist n&ouml;tig, weil Quelle und Ziel bei <b>CompactDatabase <\/b>nicht identisch sein d&uuml;rfen.<\/p>\n<h2>RepairDatabase<\/h2>\n<p>Die Methode <b>RepairDatabase<\/b> versucht, eine besch&auml;digte Datenbankdatei zu reparieren. Ihre Signatur ist denkbar einfach:<\/p>\n<pre>DBEngine.RepairDatabase(Name)<\/pre>\n<p>Die Methode existiert noch aus &auml;lteren DAO-Versionen. In modernen ACE-Datenbanken (<b>.accdb<\/b>-Format) ist ihre Wirkung begrenzt, da das neuere Format robuster gegen&uuml;ber Besch&auml;digungen ist als das &auml;ltere MDB-Format. F&uuml;r <b>.accdb<\/b>-Dateien ist <b>CompactDatabase <\/b>in der Regel das wirksamere Mittel. Das zeigt sich auch in der Benutzeroberfl&auml;che von Access: Der entsprechende Befehl hei&szlig;t <b>Datenbank komprimieren und reparieren<\/b>. Die Reparatur ist dabei also bereits in den Komprimierungsvorgang eingebunden.<\/p>\n<p>Dennoch kann ein direkter Aufruf von <b>RepairDatabase<\/b> insbesondere bei &auml;lteren <b>.mdb<\/b>-Datenbanken sinnvoll sein:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>DatenbankReparieren(strPfad<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> Fehler\r\n    DBEngine.RepairDatabase strPfad\r\n    <span style=\"color:blue;\">MsgBox<\/span> \"Reparatur abgeschlossen: \" & strPfad\r\n    <span style=\"color:blue;\">Exit Sub<\/span>\r\nFehler:\r\n    <span style=\"color:blue;\">MsgBox<\/span> \"Reparatur fehlgeschlagen: \" & Err.Description\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Idle<\/h2>\n<p>Die Methode <b>Idle<\/b> gibt der Datenbank-Engine Gelegenheit, ausstehende interne Aufgaben abzuschlie&szlig;en. Dazu geh&ouml;ren unter anderem das Aktualisieren von Seiten-Sperren und das Schreiben von Daten aus dem internen Schreibpuffer auf den Datentr&auml;ger. Die Methode wird mit einem optionalen Parameter aufgerufen:<\/p>\n<pre>DBEngine.Idle dbFreeLocks<\/pre>\n<p>Der Wert <b>dbFreeLocks<\/b> veranlasst die Engine, gehaltene Seitensperren freizugeben. Dies ist in Mehrbenutzerumgebungen hilfreich, wenn Sie nach einer Reihe von Lesevorg&auml;ngen sicherstellen m&ouml;chten, dass Sperren so fr&uuml;h wie m&ouml;glich freigegeben werden.<\/p>\n<p>Ein typisches Muster findet sich in Schleifen, die viele Datens&auml;tze lesen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n<span style=\"color:blue;\">Dim <\/span>lngZ&auml;hler<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Set<\/span> rst = CurrentDb().OpenRecordset(\"tblBestellungen\", _\r\n    dbOpenSnapshot)\r\nlngZ&auml;hler = 0\r\n<span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n    'Verarbeitung...\r\n    lngZ&auml;hler = lngZ&auml;hler + 1\r\n    <span style=\"color:blue;\">If <\/span>lngZ&auml;hler <span style=\"color:blue;\">Mod<\/span> 100 = 0<span style=\"color:blue;\"> Then<\/span>\r\n        DBEngine.Idle dbFreeLocks\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    rst.Move<span style=\"color:blue;\">Next<\/span>\r\n<span style=\"color:blue;\">Loop<\/span>\r\nrst.Close\r\n<span style=\"color:blue;\">Set<\/span> rst = Nothing<\/pre>\n<p>In der modernen ACE-Engine ist <b>Idle <\/b>allerdings kaum noch n&ouml;tig, da viele interne Vorg&auml;nge automatisch optimiert werden.<\/p>\n<h2>SetOption<\/h2>\n<p>Mit <b>SetOption<\/b> k&ouml;nnen Sie zur Laufzeit Registry-Einstellungen der Jet\/ACE-Engine tempor&auml;r &uuml;berschreiben, ohne die Registry selbst zu ver&auml;ndern.<\/p>\n<p>Die &Auml;nderungen gelten nur f&uuml;r die aktuelle Sitzung und werden beim n&auml;chsten Start der Engine verworfen.<\/p>\n<p>Ein Gegenst&uuml;ck zum Auslesen dieser Werte stellt die <b>DBEngine<\/b>-Klasse nicht bereit.<\/p>\n<p>Wichtig: Die &Auml;nderungen gelten f&uuml;r die gesamte Engine-Instanz und damit f&uuml;r alle ge&ouml;ffneten Datenbanken innerhalb dieser Access-Sitzung.<\/p>\n<p><b>dbMaxBufferSize<\/b> steuert die maximale Gr&ouml;&szlig;e des internen Schreibpuffers der Engine in Kilobyte. Der Standardwert betr&auml;gt 512 KB.<\/p>\n<p>Bei Anwendungen, die viele Schreiboperationen auf gr&ouml;&szlig;eren Datenmengen durchf&uuml;hren, kann ein h&ouml;herer Wert die Performance verbessern, weil die Engine weniger oft auf Datentr&auml;ger schreiben muss:<\/p>\n<pre>DBEngine.SetOption dbMaxBufferSize, 4096 '4 MB Puffer<\/pre>\n<p><b>dbMaxLocksPerFile<\/b> legt fest, wie viele Datensatz-Sperren die Engine gleichzeitig verwalten kann. Der Standardwert betr&auml;gt 9500. Bei umfangreichen Transaktionen, die viele Datens&auml;tze gleichzeitig sperren, kann dieser Wert zu niedrig sein und zu dem Laufzeitfehler 3052 f&uuml;hren (zu viele Sperren).<\/p>\n<p>Die Erh&ouml;hung sollte vor der Transaktion erfolgen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>GrosseMassenaktualisierung()\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    'Sperrlimit erh&ouml;hen, bevor die Transaktion beginnt\r\n    DBEngine.SetOption dbMaxLocksPerFile, 50000\r\n    <span style=\"color:blue;\">Set<\/span> db = CurrentDb()\r\n    db.Execute \"UPDATE tblArtikel SET Lagerbestand = 0\", _\r\n       dbFailOnError\r\n    <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>dbLockRetry<\/b> bestimmt, wie oft die Engine versucht, eine gesperrte Seite zu lesen, bevor sie einen Fehler ausgibt.<\/p>\n<p>Der Standardwert betr&auml;gt 20. <b>dbLockDelay<\/b> legt die Wartezeit in Millisekunden zwischen diesen Wiederholungsversuchen fest, der Standardwert betr&auml;gt 100 ms.<\/p>\n<p>Zusammen steuern diese beiden Konstanten, wie aggressiv die Engine bei Sperrkonflikten wiederholt. In einer Mehrbenutzerumgebung mit h&auml;ufigen Schreibkonflikten kann eine Kombination aus mehr Versuchen und l&auml;ngerer Wartezeit die Anzahl der dem Benutzer angezeigten Fehlermeldungen deutlich reduzieren:<\/p>\n<pre>'20 Versuche, je 200 ms Pause = max. 4 Sekunden warten\r\nDBEngine.SetOption dbLockRetry, 20\r\nDBEngine.SetOption dbLockDelay, 200<\/pre>\n<p><b>dbPageTimeout<\/b> gibt an, wie viele Millisekunden eine Seite im internen Cache verbleiben darf, bevor die Engine sie als veraltet betrachtet und neu von der Festplatte liest. Der Standardwert betr&auml;gt 5000 ms (5 Sekunden).<\/p>\n<p>Ein niedrigerer Wert sorgt daf&uuml;r, dass Datens&auml;tze, die andere Benutzer ge&auml;ndert haben, schneller sichtbar werden &#8211; auf Kosten h&auml;ufigerer Lesezugriffe auf die Datenbankdatei. In Einzelbenutzerumgebungen ist eine Erh&ouml;hung m&ouml;glich, um unn&ouml;tige Lesezugriffe zu vermeiden:<\/p>\n<pre>DBEngine.SetOption dbPageTimeout, 1000 '1 Sekunde in Mehrbenutzerumgebung<\/pre>\n<p><b>dbSharedAsyncDelay<\/b> und <b>dbExclusiveAsyncDelay<\/b> steuern, wie lange die Engine im gemeinsamen bzw. exklusiven Modus wartet, bevor sie ge&auml;nderte Seiten asynchron auf den Datentr&auml;ger schreibt (in Millisekunden). Standardwerte sind 0 ms im gemeinsamen und 50 ms im exklusiven Modus.<\/p>\n<p>Ein h&ouml;herer Wert bei <b>dbSharedAsyncDelay<\/b> kann den Schreibdurchsatz in Mehrbenutzerumgebungen verbessern, erh&ouml;ht aber das Risiko von Datenverlust bei einem Absturz. <b>dbFlushTransactionTimeout<\/b> bestimmt, wie lange nach einer Transaktion gewartet wird, bevor die Engine die Daten endg&uuml;ltig auf den Datentr&auml;ger schreibt.<\/p>\n<p><b>dbUserCommitSync<\/b> und <b>dbImplicitCommitSync<\/b> steuern, ob explizite bzw. implizite Commits synchron (sofort auf Datentr&auml;ger) oder asynchron (verz&ouml;gert) ausgef&uuml;hrt werden. Der Standardwert ist bei beiden <b>True<\/b> (synchron).<\/p>\n<p>Eine &Auml;nderung auf <b>False<\/b> kann die Performance bei vielen kleinen Transaktionen verbessern, birgt aber das gleiche Absturzrisiko wie die Async-Delay-Einstellungen.<\/p>\n<p>Das folgende Beispiel zeigt, wie Sie die wichtigsten Parameter gezielt setzen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>EngineOptimieren()\r\n    DBEngine.SetOption dbMaxBufferSize, 2048\r\n    DBEngine.SetOption dbMaxLocksPerFile, 25000\r\n    DBEngine.SetOption dbLockRetry, 30\r\n    DBEngine.SetOption dbLockDelay, 150\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese &Auml;nderungen werden jedoch nicht dauerhaft in der Registry gespeichert. Es gibt zwar kein Gegenst&uuml;ck zu <b>SetOption <\/b>zum Lesen der entsprechenden Einstellungen in der <b>DBEngine<\/b>-Klasse. Die Standardwerte der Engine lassen sich gegebenenfalls &uuml;ber die Registry ermitteln. Diese Werte entsprechen jedoch nicht zwingend den zur Laufzeit mit <b>SetOption<\/b> gesetzten Werten, da diese nur tempor&auml;r f&uuml;r die aktuelle Sitzung gelten. Die Funktion zum Auslesen von Registry-Eintr&auml;gen sieht so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>RegistryWertLesen(strKey<span style=\"color:blue;\"> As String<\/span>, _\r\n        strValueName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Variant<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>objShell<span style=\"color:blue;\"> As Object<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strFullPath<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> objShell = CreateObject(\"WScript.Shell\")\r\n    <span style=\"color:blue;\">If <\/span>Right$(strKey, 1) &lt;&gt; \"\\\"<span style=\"color:blue;\"> Then<\/span>\r\n        strFullPath = strKey & \"\\\" & strValueName\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        strFullPath = strKey & strValueName\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> Fehler\r\n    RegistryWertLesen = objShell.RegRead(strFullPath)\r\n    <span style=\"color:blue;\">Exit Function<\/span>\r\nFehler:\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Fehler bei RegRead: \" & strFullPath\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Err.Number: \" & Err.Number & \" - \" _\r\n        & Err.Description\r\n    RegistryWertLesen = Null\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die vier in der vorherigen Prozedur gesetzten Werte k&ouml;nnen wir wie folgt auslesen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>EngineOptionenAusRegistryLesen()\r\n    <span style=\"color:blue;\">Dim <\/span>strRegistrypath<span style=\"color:blue;\"> As String<\/span>\r\n    strRegistrypath = \"HKEY_LOCAL_MACHINE\\SOFTWARE\\\" _\r\n        & \"Microsoft\\Office\\16.0\\\" _\r\n        & \"Access Connectivity Engine\\Engines\\ACE\"\r\n    <span style=\"color:blue;\">Debug.Print<\/span> RegistryWertLesen(strRegistrypath, _\r\n        \"MaxBufferSize\")\r\n    <span style=\"color:blue;\">Debug.Print<\/span> RegistryWertLesen(strRegistrypath, _\r\n        \"MaxLocksPerFile\")\r\n    <span style=\"color:blue;\">Debug.Print<\/span> RegistryWertLesen(strRegistrypath, _\r\n        \"LockRetry\")\r\n    <span style=\"color:blue;\">Debug.Print<\/span> RegistryWertLesen(strRegistrypath, _\r\n        \"LockDelay\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Der genaue Registry-Pfad kann je nach Office-Version, Installationsart (zum Beispiel Click-to-Run) und Bitness abweichen.<\/p>\n<p>Hier stellen wir jedoch schnell fest, dass dies nicht die Werte liefert, die wir zuvor eingestellt haben. <b>SetOption<\/b> &auml;ndert nicht die dauerhaft in der Registry gespeicherten Initialwerte. Die Methode wirkt nur auf die laufende Engine-Sitzung.<\/p>\n<h2>CurrentDb() und Workspaces(0).Databases(0) richtig einordnen<\/h2>\n<p>Das <b>Databases(0)<\/b>-Objekt im Standardarbeitsbereich repr&auml;sentiert die aktuell ge&ouml;ffnete Datenbank &#8211; also dieselbe Datenbank, die auch &uuml;ber <b>CurrentDb()<\/b> zug&auml;nglich ist. Der Unterschied: <b>CurrentDb()<\/b> erstellt bei jedem Aufruf ein neues Objekt, w&auml;hrend <b>Workspaces(0).Databases(0)<\/b> direkt auf das interne Objekt verweist. Dieses kann jedoch veraltete Informationen enthalten.<\/p>\n<p>Das k&ouml;nnen wir leicht an einem Beispiel demonstrieren. Wir f&uuml;hren einmal die folgende Prozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Test_CurrentDb_Vs_Workspace_0()\r\n    <span style=\"color:blue;\">Debug.Print<\/span> CurrentDb.TableDefs.Count\r\n    <span style=\"color:blue;\">Debug.Print<\/span> DBEngine.Workspaces(0).Databases(0). _\r\n        TableDefs.Count\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies liefert direkt nach dem &Ouml;ffnen der Datenbank die gleichen Werte. Wenn wir nun jedoch eine neue Tabelle anlegen und die Prozedur erneut ausf&uuml;hren, erhalten wir f&uuml;r <b>DBEngine.Workspaces(0).Databases(0).TableDefs.Count <\/b>den gleichen Wert wie zuvor, <b>CurrentDb.TableDefs.Count <\/b>zeigt aber einen Wert an, der die neu angelegte Tabelle mitz&auml;hlt.<\/p>\n<p>Das Gleiche gilt &uuml;brigens, wenn wir <b>CurrentDb <\/b>in einer globalen Variablen etwa namens <b>db <\/b>speichern. Geben wir dann zun&auml;chst <b>db.TableDefs.Count<\/b> aus, legen anschlie&szlig;end eine neue Tabelle an und fragen den Wert erneut ab, bleibt er unver&auml;ndert, obwohl sich die Anzahl der Tabellen tats&auml;chlich ge&auml;ndert hat. Hier m&uuml;ssen wir <b>db<\/b> entweder erneut mit <b>CurrentDb <\/b>f&uuml;llen, um den aktuellen Wert zu erhalten, oder wir fragen direkt <b>CurrentDb.TableDefs.Count <\/b>ab.<\/p>\n<h2>Beispiel zur Nutzung verschiedener Informationen<\/h2>\n<p>Zum Abschluss ein kompaktes Beispiel, das wichtige Informationen aus der <b>DBEngine<\/b> und dem Standardarbeitsbereich in einem Dialog zusammenstellt &#8211; n&uuml;tzlich etwa f&uuml;r ein Informations-Dialogfeld einer Anwendung (siehe Listing 3).<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>DBEngineInfo()\r\n    <span style=\"color:blue;\">Dim <\/span>ws<span style=\"color:blue;\"> As <\/span>DAO.Workspace\r\n    <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n    <span style=\"color:blue;\">Dim <\/span>strInfo<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> ws = DBEngine.Workspaces(0)\r\n    <span style=\"color:blue;\">Set<\/span> db = ws.Databases(0)\r\n    strInfo = \"DAO-Version: \" & DBEngine.Version & <span style=\"color:blue;\">vbCrLf<\/span>\r\n    strInfo = strInfo & \"Arbeitsbereich: \" & ws.Name & <span style=\"color:blue;\">vbCrLf<\/span>\r\n    strInfo = strInfo & \"Datenbankpfad: \" & db.Name & <span style=\"color:blue;\">vbCrLf<\/span>\r\n    strInfo = strInfo & \"Verbindung: \" & db.Connect & <span style=\"color:blue;\">vbCrLf<\/span>\r\n    strInfo = strInfo & \"Login-Timeout: \" & DBEngine.LoginTimeout & \" Sek.\"\r\n    <span style=\"color:blue;\">MsgBox<\/span> strInfo, vbInformation, \"Datenbankinfo\"\r\n    <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> ws = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Prozedur DBEngineInfo<\/span><\/b><\/p>\n<h2>Fazit<\/h2>\n<p>Die <b>DBEngine<\/b>-Klasse ist die Wurzel der DAO-Objekthierarchie und bietet mehr als nur einen Einstiegspunkt zu Datenbanken.<\/p>\n<p>Mit ihren Methoden k&ouml;nnen Sie externe Datenbanken &ouml;ffnen, Transaktionen &uuml;ber eigene Arbeitsbereiche kapseln, Datenbanken komprimieren und reparieren sowie Engine-Parameter f&uuml;r die aktuelle Sitzung feinjustieren. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer in Access per VBA auf Datenbanken zugreift, nutzt meist die DAO-Bibliothek &#8211; oft ohne zu wissen, dass am Anfang der gesamten Objekthierarchie die &#8222;DBEngine&#8220; steht. Sie repr&auml;sentiert die Datenbank-Engine selbst und bietet Zugriff auf Arbeitsbereiche, Verbindungen und globale Einstellungen. Dieser Beitrag stellt die wichtigsten Eigenschaften und Methoden der DBEngine-Klasse vor und zeigt anhand praktischer Beispiele, wie Sie diese gewinnbringend einsetzen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662026,66032026,44000035],"tags":[],"class_list":["post-55001600","post","type-post","status-publish","format-standard","hentry","category-662026","category-66032026","category-Datenzugriff_programmieren"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Die DBEngine-Klasse der DAO-Bibliothek - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Die DBEngine-Klasse der DAO-Bibliothek\" \/>\n<meta property=\"og:description\" content=\"Wer in Access per VBA auf Datenbanken zugreift, nutzt meist die DAO-Bibliothek - oft ohne zu wissen, dass am Anfang der gesamten Objekthierarchie die &quot;DBEngine&quot; steht. Sie repr&auml;sentiert die Datenbank-Engine selbst und bietet Zugriff auf Arbeitsbereiche, Verbindungen und globale Einstellungen. Dieser Beitrag stellt die wichtigsten Eigenschaften und Methoden der DBEngine-Klasse vor und zeigt anhand praktischer Beispiele, wie Sie diese gewinnbringend einsetzen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-17T07:21:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Die DBEngine-Klasse der DAO-Bibliothek\",\"datePublished\":\"2026-03-17T07:21:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/\"},\"wordCount\":2345,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6f21e7346b6040ef8d75d664ae33c9da\",\"articleSection\":[\"2026\",\"3\\\/2026\",\"Datenzugriff programmieren\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/\",\"name\":\"Die DBEngine-Klasse der DAO-Bibliothek - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6f21e7346b6040ef8d75d664ae33c9da\",\"datePublished\":\"2026-03-17T07:21:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6f21e7346b6040ef8d75d664ae33c9da\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6f21e7346b6040ef8d75d664ae33c9da\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_DBEngineKlasse_der_DAOBibliothek\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Die DBEngine-Klasse der DAO-Bibliothek\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Die DBEngine-Klasse der DAO-Bibliothek - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/","og_locale":"de_DE","og_type":"article","og_title":"Die DBEngine-Klasse der DAO-Bibliothek","og_description":"Wer in Access per VBA auf Datenbanken zugreift, nutzt meist die DAO-Bibliothek - oft ohne zu wissen, dass am Anfang der gesamten Objekthierarchie die \"DBEngine\" steht. Sie repr&auml;sentiert die Datenbank-Engine selbst und bietet Zugriff auf Arbeitsbereiche, Verbindungen und globale Einstellungen. Dieser Beitrag stellt die wichtigsten Eigenschaften und Methoden der DBEngine-Klasse vor und zeigt anhand praktischer Beispiele, wie Sie diese gewinnbringend einsetzen.","og_url":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-03-17T07:21:26+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Die DBEngine-Klasse der DAO-Bibliothek","datePublished":"2026-03-17T07:21:26+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/"},"wordCount":2345,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da","articleSection":["2026","3\/2026","Datenzugriff programmieren"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/","url":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/","name":"Die DBEngine-Klasse der DAO-Bibliothek - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da","datePublished":"2026-03-17T07:21:26+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/6f21e7346b6040ef8d75d664ae33c9da"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Die_DBEngineKlasse_der_DAOBibliothek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Die DBEngine-Klasse der DAO-Bibliothek"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001600"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001600\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}