{"id":55000288,"date":"2016-04-01T00:00:00","date_gmt":"2020-01-24T15:59:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=288"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"ADODB_als_Alternative_zu_DAO","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html","title":{"rendered":"ADODB als Alternative zu DAO"},"content":{"rendered":"<p class='introduction'>Der Umgang mit Daten unter VBA findet in der Regel &uuml;ber die Bibliothek DAO statt, welche Access  &uuml;ber den gleichnamigen Verweis beim Erzeugen einer neuen Datenbank automatisch in das VBA-Projekt einbindet. Microsoft hat sie damit zum Standard erkoren. Tats&auml;chlich gibt es aber noch ein anderes Schwergewicht f&uuml;r den Datenzugriff, das unter dem K&uuml;rzel ADODB daherkommt. F&uuml;hren wir uns diese Bibliothek einmal als Alternative zu DAO zu Gem&uuml;te.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1508_ADO.zip<\/b>.<\/p>\n<h2>Datenzugriffsbibliotheken<\/h2>\n<p>Die Zeiten &auml;ndern sich. War <b>DAO<\/b> (<b>Data Access Objects<\/b>) als Schnittstelle zu den Datenobjekten unter VBA mit dem Erscheinen von Access noch die einzige Bibliothek, so f&uuml;hrte Microsoft mit <b>Office 2000 <\/b>eine neue ein, die die alte zunehmend ersetzen und ihr angeblich in vielerlei Hinsicht &uuml;berlegen sein sollte. Die Bezeichnung lautete <b>ADODB<\/b> als Abk&uuml;rzung f&uuml;r das etwas schr&auml;ge <b>Microsoft ActiveX Data Objects Data Base<\/b>.<\/p>\n<p>Ein Hintergrund daf&uuml;r war die Einf&uuml;hrung der <b>Access-Projekte<\/b>, die den unmittelbaren Zugriff auf Objekte eines verbundenen SQL-Servers erlaubten und sogar deren Verwaltung erm&ouml;glichen. Derlei war mit <b>DAO<\/b> unm&ouml;glich, und so nahm man sich der bereits f&uuml;r Visual Basic vorliegenden Implementation von <b>ADO<\/b> an und pfropfte sie Access auf.<\/p>\n<p>Statt <b>DAO<\/b> wurde beim Neuanlegen einer Datenbank automatisch der Verweis auf die neue Bibliothek gesetzt. Das &auml;nderte indessen nichts daran, dass die Access-Objekte, wie Formulare und Berichte, unter der Haube weiterhin mit <b>DAO<\/b> arbeiteten.<\/p>\n<p>Diese Inkonsistenz ist neben der Tatsache, dass die Programmierung &uuml;ber <b>ADO<\/b> deutlich aufw&auml;ndiger und komplizierter ist, mit ein Grund daf&uuml;r, dass diese Technik von Entwicklern nicht wirklich angenommen wurde.<\/p>\n<p>So elegant sie bei der Einbindung von Daten auf SQL-Servern ist, so &uuml;berfl&uuml;ssig beim Zugriff auf die Tabellen der lokalen Access-Datenbank oder eines verkn&uuml;pften Backends.<\/p>\n<p>Microsoft wurde sich dessen offenbar bewusst, weshalb ab <b>Access 2007<\/b> die Umkehr stattfand. Nun sollte <b>DAO<\/b> nicht nur f&uuml;r <b>JET-Datenbanken<\/b>, sondern sogar f&uuml;r die Ansprache von SQL-Servern &uuml;ber <b>ODBC<\/b> eingesetzt werden. Daf&uuml;r d&uuml;rfte allerdings nicht nur Einsicht Vater des Gedankens gewesen sein, sondern auch der Fakt, dass die Technik der <b>Access-Projekte<\/b> nicht mehr weiterentwickelt wurde und nach und nach dem Rotstift anheimfiel.<\/p>\n<p>Auch, wenn <b>ADO<\/b> mittlerweile ein Stiefkind zu sein scheint, kann es nicht schaden, sich die Datenzugriffsbibliothek einmal genauer anzusehen. Denn sie verf&uuml;gt &uuml;ber einige interessante Features, die <b>DAO<\/b> fehlen, weshalb ihr Einsatz in manchen F&auml;llen doch noch sinnvoll sein kann.<\/p>\n<h2>ADODB im VBA-Projekt<\/h2>\n<p>Den Verweis auf die ADO-Bibliothek legt Access, wie erw&auml;hnt, nicht mehr selbst an, wenn Sie eine neue Datenbank erzeugen. Sie m&uuml;ssen Sie selbst einbinden. Dazu &ouml;ffnen Sie im VBA-Editor &uuml;ber <b>Extras|Verweise&#8230; <\/b>den <b>Verweise-Dialog<\/b> und klappern dessen Eintr&auml;ge nach der <b>Microsoft ActiveX Data Objects 2.x Library<\/b> ab. Sie werden gleich mehrere davon finden, die die Versionsnummern <b>2.1<\/b> bis <b>2.8<\/b> tragen. Tats&auml;chlich handelt es sich dabei aber lediglich um verschiedene Typbibliotheken f&uuml;r den gleichen Satz an DLLs, also das gleiche System, die aus Kompatibilit&auml;tsgr&uuml;nden angelegt sind. Aktivieren Sie einfach die h&ouml;chste Version <b>2.8<\/b>. Nach dem Schlie&szlig;en des<b> Verweise-Dialogs <\/b>finden Sie die Bibliothek im VBA-Objektkatalog, wenn Sie im Kombinationsfeld links oben den Eintrag <b>ADODB<\/b> ausw&auml;hlen.<\/p>\n<h2>Die Struktur von ADO<\/h2>\n<p>Schon am Umfang der Klassen der Bibliothek ist ersichtlich, dass deren Programmierung etwas komplexer ist, als unter DAO. Um die Bedeutung der einzelnen Objekte verst&auml;ndlich zu machen, ist es n&uuml;tzlich, sie in einen Vergleich zu jenen der DAO-Bibliothek zu setzen. In Bild 1 sind die wichtigsten Objekte gegen&uuml;bergestellt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/ADOvsDAO.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/ADOvsDAO.png\" alt=\"Die Datenzugriffsbibliotheken ADO und DAO in der logischen Gegen&uuml;berstellung\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Die Datenzugriffsbibliotheken ADO und DAO in der logischen Gegen&uuml;berstellung<\/p>\n<p>W&auml;hrend Sie unter DAO auf die aktuelle Datenbank (<b>Database-Objekt<\/b>) unmittelbaren Zugriff haben, indem Sie die Funktion <b>CurrentDb<\/b> des <b>Access-Application<\/b>-Objekts aufrufen, oder die Methode <b>OpenDatabase<\/b> des ebenfalls bereits vorliegenden <b>DbEngine-Objekts<\/b>, muss in ADO erst eine Verbindung zur Datenbank aufgebaut werden.<\/p>\n<p>Das ist auch schon der Hauptunterschied: Access ist beim &ouml;ffnen einer Datenbank ganz unbemerkt bereits mit der <b>JET-Engine<\/b> verbandelt. Die dar&uuml;ber liegende Schicht, die Treiber der <b>Access Database Engine<\/b> (<b>ACE<\/b>) samt ihrer dateispezifischen <b>ISAM-Treiber<\/b>, bleibt Ihnen verborgen. Verwendet werden dabei die Treiber f&uuml;r <b>MDB<\/b>&#8211; und <b>ACCDB<\/b>-Dateien. Neben diesen gibt es ja etwa auch noch jene zum &ouml;ffnen von <b>Excel<\/b>-, <b>Text<\/b>&#8211; oder <b>DBase<\/b>-Dateien. Um diese Schicht brauchen Sie sich nicht zu k&uuml;mmern &#8211; die Integration vollzieht Access selbst. Anders unter <b>ADO<\/b>: Hier muss zun&auml;chst dezidiert der sogenannte <b>Provider<\/b> angegeben werden.<\/p>\n<p>Dabei handelt es sich Imgrunde um einen im System registrierten Treiber, der zum &ouml;ffnen einer Datei herangezogen werden soll. Diese <b>Provider<\/b> werden von <b>Office<\/b> installiert, teilweise aber auch von <b>Windows<\/b> oder anderen Anwendungen. Alle <b>Provider<\/b> sind namentlich gekennzeichnet. So lautet der Name des <b>Providers<\/b> zum &ouml;ffnen einer Access-Datenbank aktuell etwa <b>Microsoft.ACE.OLEDB.12.0<\/b>. Fr&uuml;her nahm man zum Ansprechen einer <b>MDB-Datei <\/b>den <b>Jet-Provider Microsoft.Jet.OLEDB.4.0<\/b>. Soll ein <b>MS-SQL-Server<\/b> verbunden werden, dann hei&szlig;t der Provider <b>SQLOLEDB.1<\/b>. Und schlie&szlig;lich kommen weitere <b>DBMS-Server<\/b> &uuml;ber <b>ODBC<\/b> ins Spiel, wenn der <b>MSDASQL.1<\/b>-Provider verwendet wird. Wie die jeweiligen Provider lauten, l&auml;sst sich aus Access heraus nicht ermitteln. Greifen Sie im Zweifelsfall zu einer Dokumentation im Internet, wie etwa der Domain <b>connectionsstrings.com<\/b>. Dort klicken Sie auf das gew&uuml;nschte das Datenbanksystem, um die Verbindungszeichenfolgen zu erfahren. Die Seite unterscheidet dabei zwischen Zeichenfolgen f&uuml;r <b>ODBC<\/b>, <b>OLEDB<\/b> und <b>.NET<\/b>. Uns interessieren an dieser Stelle nur die <b>OLEDB-Angaben<\/b>, ein Synonym f&uuml;r <b>ADODB<\/b>.<\/p>\n<p>Neben dem Namen des Providers finden Sie dort auch noch weitere Angaben, die Sie zum <b>Provider<\/b> machen k&ouml;nnen, n&auml;mlich die Optionen-Strings, welche die Treiber steuern. Doch dazu sp&auml;ter mehr.<\/p>\n<p>Haben Sie die Angaben zum <b>Provider<\/b> beisammen, so k&ouml;nnen Sie sich an das Anlegen eines <b>Connection-Objekts<\/b> machen. <b>ADO<\/b> kennt kein <b>Database-Objekt<\/b>, sondern nur das Verbindungsobjekt <b>Connection<\/b>, welches diesem aber in der Funktionalit&auml;t &auml;hnelt. Die Verbindung wird &uuml;ber die Methode <b>Open<\/b> hergestellt. Steht diese, so kann analog zur <b>Database<\/b> ein <b>Recordset<\/b> auf die Datenbankobjekte ge&ouml;ffnet werden. Nur lautet die hier verwendete Methode nicht <b>OpenRecordset<\/b>, sondern <b>Execute<\/b>. In beiden F&auml;llen wird ein <b>Recordset<\/b> zur&uuml;ckgegeben.<\/p>\n<p>Allerdings ist ein <b>ADO-Recordset<\/b> nicht dasselbe, wie ein <b>DAO-Recordset<\/b>! Zwar gleichen sich dessen Methoden weitgehend, doch es handelt sich dennoch um zwei unterschiedliche Klassen. Wenn Sie Objektvariablen zu diesen Recordsets deklarieren, so geben Sie deshalb ausdr&uuml;cklich die Bibliothek an, aus dem das <b>Recordset<\/b> stammen soll:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n<span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>ADODB.Recordset<\/pre>\n<p>Das beugt Verwirrung vor, denn im VBA-Projekt k&ouml;nnen Sie auf beide Bibliotheken zugleich verweisen!<\/p>\n<p>Die Unterschiede zwischen dem einen und dem anderen <b>Recordset<\/b> sind marginal. Beide weisen die &uuml;blichen Methoden zur Navigation (<b>MoveNext<\/b>, <b>MoveLast<\/b>, etc.) auf und haben jeweils eine <b>Fields-Auflistung<\/b>, &uuml;ber die auf die einzelnen Felder des Ergebnisses zugegriffen werden kann. <\/p>\n<h2>Connection anlegen<\/h2>\n<p>Gehen wir nun Schritt f&uuml;r Schritt vor, um an die Daten einer Datenbank &uuml;ber <b>ADO<\/b> zu gelangen.<\/p>\n<p>Dass Access kein ADO-Pendant zu <b>CurrentDb<\/b> enth&auml;lt, stimmt nicht ganz. Seit Einf&uuml;hrung von <b>ADODB<\/b> gibt es das <b>CurrentProject-Objekt<\/b>. Dessen Eigenschaft <b>Connection<\/b> stellt die <b>ADO-Connection<\/b> zur aktuellen Datenbank dar. Sie k&ouml;nnen es direkt verwenden, um ein <b>ADO-Recordset<\/b> zu &ouml;ffnen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>con<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n<span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n<span style=\"color:blue;\">Set<\/span> con = _\r\n    CurrentProject.Connection\r\n<span style=\"color:blue;\">Set<\/span> rs = _\r\n   con.Execute( _\r\n   \"SELECT * FROM tblKunden\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> rs(3).Value<\/pre>\n<p>Hier wird zun&auml;chst mit der <b>Connection-Variablen<\/b> <b>con<\/b> auf das <b>Connection-Object<\/b> von <b>CurrentProject<\/b> verwiesen. Das <b>Recordset<\/b> wird &uuml;ber die <b>Execute<\/b>-Anweisung der <b>Connection<\/b> gef&uuml;llt, welcher der gew&uuml;nschte SQL-Ausdruck &uuml;bergeben wird. Im Beispiel ist das der komplette Inhalt der Tabelle <b>tblKunden<\/b>. Schlie&szlig;lich wird das Feld Nummer 3 und dessen Wert abgefragt. (Die 3 in Klammern ist die abgek&uuml;rzte Syntax f&uuml;r <b>rs.Fields(3).Value<\/b>, da die <b>Fields<\/b>-Auslistung die Standardeigenschaft eines <b>ADO-Recordsets<\/b> ist.)<\/p>\n<p>Zum Vergleich die analoge Routine in der <b>DAO<\/b>-Version:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>dbs<span style=\"color:blue;\"> As <\/span>Database\r\n<span style=\"color:blue;\">Dim <\/span>rs<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n<span style=\"color:blue;\">Set<\/span> dbs = CurrentDb\r\n<span style=\"color:blue;\">Set<\/span> rs = dbs.OpenRecordset( _\r\n     \"SELECT * FROM tblKunden\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> rs(3).Value<\/pre>\n<p>Wenn Sie nicht die aktuelle Datenbank ansprechen m&ouml;chten, sondern eine andere Access-Datei, so muss ein Connection-Objekt von Grund auf neu erzeugt werden:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>con<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n<span style=\"color:blue;\">Set<\/span> con = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\ncon.Provider = _\r\n    \"Microsoft.ACE.OLEDB.12.0\"<\/pre>\n<p>&uuml;ber die <b>New<\/b>-Anweisung wird ein neues <b>Connection-Objekt<\/b> angelegt. Damit es wei&szlig;, welche Treiber zur Anwendung kommen sollen, wird der Provider f&uuml;r <b>ACE-Datenbanken<\/b> angegeben. Damit ist die oberste Schicht klargestellt.<\/p>\n<p>Doch woher wei&szlig; die Connection, welches das Objekt der Begierde, die Datenbankdatei, ist Die Angabe des  Pfads muss in der Eigenschaft ConnectionString untergebracht werden:<\/p>\n<pre>con.ConnectionString = _\r\n\"Data Source=c:\\xyz\\test.accdb;\"<\/pre>\n<p>Der <b>ConnectionString<\/b> ist der Ort, wo alle Optionen zur Verbindung eingestellt werden. Im Falle einer <b>ACE-Datenbank<\/b>, also einer <b>MDB<\/b> oder <b>ACCDB<\/b>, lautet dabei die Option f&uuml;r den Zugriffspfad <b>Data Source<\/b>. Bei anderen Providern k&ouml;nnte dieser Ausdruck auch einen anderen Namen haben.<\/p>\n<p>Zus&auml;tzlich lassen sich weitere Optionen durch Semikola getrennt im String einbauen:<\/p>\n<pre>\"Data Source=c:\\datenbanken\\test.accdb;Mode=Share Deny None;\"<\/pre>\n<p>Mit <b>Mode<\/b> wird bestimmt, dass der Datenzugriff ohne Mehrbenutzersperren erfolgen soll. Und selbst der <b>Provider<\/b> kann hier untergebracht werden, was das Setzen in der Eigenschaft <b>.Provider<\/b> &uuml;berfl&uuml;ssig macht:<\/p>\n<pre>\"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\datenbanken\\test.accdb;Mode=Share Deny None;\"<\/pre>\n<p>Um eine Vorstellung zu bekommen, welche weiteren Optionen gesetzt sein k&ouml;nnen, setzen Sie diesen Ausdruck im VBA-Direktfenster ab:<\/p>\n<pre> CurrentProject.Connection. _\r\n    ConnectionString<\/pre>\n<p>Auf eine Abbildung des Ergebnisses wird hier verzichtet &#8211; Access setzt Unmengen ACE-spezifischer Verbindungsoptionen.<\/p>\n<p>Sind alle n&ouml;tigen Angaben im <b>ConnectionString<\/b> gemacht, so kann es an das physische Herstellen der Verbindung gehen, welches die <b>Open-Methode<\/b> bewirkt:<\/p>\n<pre>con.Open<\/pre>\n<p>Tritt kein Fehler bei dieser Anweisung auf, so ist die Verbindung ge&ouml;ffnet und bereit zum Abfragen oder Schreiben von Daten &uuml;ber die <b>Execute-Methode<\/b>, wie im Recordset-Beispiel oben.<\/p>\n<h2>ADO-Routinen<\/h2>\n<p>Da der Schreibaufwand bei ADO-Programmierung etwas h&ouml;her ist, als bei DAO, empfiehlt es sich, f&uuml;r grundlegende Aufgaben ein separates VBA-Modul anzulegen. In der Beispieldatenbank nennt dieses sich <b>mdlADODB<\/b>. Im Folgenden sind einige Abschnitte des Moduls dargestellt.<\/p>\n<p><b>MyConnectString<\/b> (Listing 1) ist eine Hilfsfunktion, die eine g&uuml;ltige Verbindungszeichenfolge zur&uuml;ckgibt.  Sie beschr&auml;nkt sich auf das Zusammensetzen des <b>ConnectionStrings<\/b> &uuml;ber String-Verkettung. Neben dem <b>Provider<\/b> wird der Pfad zur anzusprechenden Access-Datenbank (<b>1508_Backend.accdb<\/b>) im Verzeichnis der aktuellen Datenbank (<b>CurrentProject.Path<\/b>) hier hartkodiert eingebaut. So eine Hilfsfunktion ist unter Umst&auml;nden sinnvoll, damit der String nicht an mehreren Stellen im Code neu aufgebaut werden muss.<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>MyConnectString()<span style=\"color:blue;\"> As String<\/span>\r\n     MyConnectString = \"Provider=Microsoft.ACE.OLEDB.12.0;\" & _\r\n         \"Data Source=\" & CurrentProject.Path & \"\\1508_Backend.accdb;\" & _\r\n         \"Mode=Share Deny None;\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: Zusammensetzen eines ConnectionStrings f&uuml;r ADO<\/p>\n<p>Auch das <b>Connection<\/b>-Objekt wird in einer eigenen Prozedur angelegt, die den Namen <b>DBConnection<\/b> tr&auml;gt. In Listing 2 wird dabei zun&auml;chst ermittelt, ob der Parameter <b>sConnect<\/b> leer ist. In diesem Fall wird das <b>Connection-Objekt<\/b> der aktuellen Datenbank zur&uuml;ckgegeben. Andernfalls wird eine neue <b>Connection<\/b> angelegt, deren <b>ConnectionString<\/b> gesetzt und schlie&szlig;lich die Verbindung &uuml;ber <b>Open<\/b> ge&ouml;ffnet.<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>DBConnection(<span style=\"color:blue;\">Optional<\/span> sConnect<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(sConnect) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> DBConnection = CurrentProject.Connection\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> DBConnection = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n         DBConnection.ConnectionString = sConnect\r\n         DBConnection.CursorLocation = adUseClient\r\n         DBConnection.Open\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 2: Funktion zum Zur&uuml;ckgeben eines ADO-Connection-Objekts<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000288\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000288?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000288\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Umgang mit Daten unter VBA findet in der Regel &uuml;ber die Bibliothek DAO statt, welche Access  &uuml;ber den gleichnamigen Verweis beim Erzeugen einer neuen Datenbank automatisch in das VBA-Projekt einbindet. Microsoft hat sie damit zum Standard erkoren. Tats&auml;chlich gibt es aber noch ein anderes Schwergewicht f&uuml;r den Datenzugriff, das unter dem K&uuml;rzel ADODB daherkommt. F&uuml;hren wir uns diese Bibliothek einmal als Alternative zu DAO zu Gem&uuml;te.<\/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":[662015,66082015,44000018],"tags":[],"class_list":["post-55000288","post","type-post","status-publish","format-standard","hentry","category-662015","category-66082015","category-Datenzugriff_programmieren"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ADODB als Alternative zu DAO - Access [basics]<\/title>\n<meta name=\"description\" content=\"Der Umgang mit Daten unter VBA findet in der Regel \u00fcber die Bibliothek DAO statt, welche Access \u00fcber den gleichnamigen Verweis beim Erzeugen einer neuen Datenbank automatisch in das VBA-Projekt einbindet. Microsoft hat sie damit zum Standard erkoren. Tats\u00e4chlich gibt es aber noch ein anderes Schwergewicht f\u00fcr den Datenzugriff, das unter dem K\u00fcrzel ADODB daherkommt. F\u00fchren wir uns diese Bibliothek einmal als Alternative zu DAO zu Gem\u00fcte.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ADODB als Alternative zu DAO - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Der Umgang mit Daten unter VBA findet in der Regel \u00fcber die Bibliothek DAO statt, welche Access \u00fcber den gleichnamigen Verweis beim Erzeugen einer neuen Datenbank automatisch in das VBA-Projekt einbindet. Microsoft hat sie damit zum Standard erkoren. Tats\u00e4chlich gibt es aber noch ein anderes Schwergewicht f\u00fcr den Datenzugriff, das unter dem K\u00fcrzel ADODB daherkommt. F\u00fchren wir uns diese Bibliothek einmal als Alternative zu DAO zu Gem\u00fcte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/ADOvsDAO.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"26\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/ADOvsDAO.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\",\"name\":\"ADODB als Alternative zu DAO - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:25+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Der Umgang mit Daten unter VBA findet in der Regel \\u00fcber die Bibliothek DAO statt, welche Access \\u00fcber den gleichnamigen Verweis beim Erzeugen einer neuen Datenbank automatisch in das VBA-Projekt einbindet. Microsoft hat sie damit zum Standard erkoren. Tats\\u00e4chlich gibt es aber noch ein anderes Schwergewicht f\\u00fcr den Datenzugriff, das unter dem K\\u00fcrzel ADODB daherkommt. F\\u00fchren wir uns diese Bibliothek einmal als Alternative zu DAO zu Gem\\u00fcte.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/ADODB_als_Alternative_zu_DAO.html\",\"name\":\"ADODB als Alternative zu DAO\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000288"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000288\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}