{"id":55001111,"date":"2017-12-01T00:00:00","date_gmt":"2020-05-13T21:27:57","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1111"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Die_CurrentDbFunktion_und_das_DatabaseObjekt","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/","title":{"rendered":"Die CurrentDb-Funktion und das Database-Objekt"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Der Zugriff auf die Objekte der aktuellen Datenbank erfolgt in vielen F&auml;llen &uuml;ber eine Objektvariable mit dem Datentyp Database. Diese wird dann mit der CurrentDb-Funktion gef&uuml;llt. Der Zugriff auf die aktuelle Datenbank kann dabei auch direkt &uuml;ber CurrentDb erfolgen. Dieser Beitrag liefert Informationen &uuml;ber die Eigenschaften und Methoden des Database-Objekts.<\/b><\/p>\n<p>Die folgenden beiden Zeilen kommen wohl in jeder Datenbank vor, die in irgendeiner Form mit VBA-Code ausgestattet ist:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n<span style=\"color:blue;\">Set<\/span> db = CurrentDb<\/pre>\n<p>Die erste deklariert eine Objektvariable namens <b>db <\/b>auf Basis des Datentyps <b>Database<\/b>, die zweite weist dieser Objektvariablen mit der <b>CurrentDB<\/b>-Funktion einen Verweis auf das <b>Database<\/b>-Objekt der aktuellen Access-Instanz zu.<\/p>\n<h2>Aktuelles Abbild<\/h2>\n<p>In der Praxis k&ouml;nnen Sie das <b>Database<\/b>-Objekt mit der <b>CurrentDb<\/b>-Funktion f&uuml;llen oder auch direkt &uuml;ber die <b>CurrentDb<\/b>-Funktion die Eigenschaften und Methoden des <b>Database<\/b>-Objekts der aktuellen Datenbank nutzen.<\/p>\n<p>Es gibt allerdings einen entscheidenden Unterschied: Wenn Sie das aktuelle <b>Database<\/b>-Objekt einmal mit <b>CurrentDb <\/b>ermittelt und in einer Variablen wie <b>db <\/b>gespeichert haben, dann bekommen Sie &auml;nderungen, die direkt &uuml;ber die Methoden von <b>CurrentDb <\/b>oder einer anderen Objektvariablen des Typs <b>Database <\/b>vorgenommen wurden, nicht mehr mit. Das folgende Beispiel zeigt, wie das gemeint ist:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n<span style=\"color:blue;\">Dim <\/span>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n<span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n<span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\nOn Error Resume <span style=\"color:blue;\">Next<\/span>\r\nCurrentDb.TableDefs.Delete (\"tblTest\")\r\n<span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen vorher: \" & db.TableDefs.Count\r\n<span style=\"color:blue;\">Set<\/span> tdf = CurrentDb.CreateTableDef(\"tblTest\")\r\n<span style=\"color:blue;\">Set<\/span> fld = tdf.CreateField(\"ID\", dbLong)\r\ntdf.Fields.Append fld\r\n<span style=\"color:blue;\">Set<\/span> fld = tdf.CreateField(\"Test\", dbText)\r\ntdf.Fields.Append fld\r\nCurrentDb.TableDefs.Append tdf\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen nachher CurrentDb: \"  & CurrentDb.TableDefs.Count\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen nachher db: \"  & db.TableDefs.Count<\/pre>\n<p>Hier f&uuml;llen wir die Variable <b>db <\/b>&uuml;ber <b>CurrentDb <\/b>mit dem aktuellen <b>Database<\/b>-Objekt. Dann geben wir die Anzahl der Tabellendefinitionen des <b>Database<\/b>-Objekts aus <b>db <\/b>&uuml;ber <b>db.Table.Count <\/b>im Direktfenster aus &#8211; bei einer frischen <b>.accdb<\/b>-Datenbank im Format von Access 2016 sind das beispielsweise 11.<\/p>\n<p>Anschlie&szlig;end erstellen wir &uuml;ber die <b>CreateTableDef<\/b>-Methode direkt auf Basis der von <b>CurrentDb <\/b>gelieferten Database ein neues <b>TableDef<\/b>-Objekt, also eine neue Tabelle, und f&uuml;gen dieser zwei Felder hinzu, bevor wir sie mit der <b>Append<\/b>-Methode der <b>TableDefs<\/b>-Auflistung hinzuf&uuml;gen. Schlie&szlig;lich geben wir erneut die Anzahl der <b>TableDef<\/b>-Objekte der in <b>db <\/b>gespeicherten Database und der mit <b>CurrentDb <\/b>ermittelten aktuellen Version im Direktfenster aus. Es zeigt sich, dass die in <b>db <\/b>gespeicherte Version der Datenbank die neue Tabellendefinition nicht enth&auml;lt und somit tats&auml;chlich nur einen Snapshot der Objekte liefert.<\/p>\n<p>Sie sollten also beim Zugriff auf die Datenbank &uuml;ber das <b>Database<\/b>-Objekt ber&uuml;cksichtigen, dass eine per <b>CurrentDb <\/b>referenzierte Instanz m&ouml;glicherweise einen veralteten Zustand liefert.<\/p>\n<h2>Aktualit&auml;t bei Recordsets<\/h2>\n<p>Aber wie sieht das bei Recordsets aus &#8211; liefern diese auch in Abh&auml;ngigkeit von <b>CurrentDb<\/b>\/<b>db <\/b>unterschiedliche Ergebnismengen Das haben wir uns in der Prozedur aus Listing 1 angeschaut. Hier haben wir die Tabelle <b>tblTest <\/b>zun&auml;chst vollst&auml;ndig geleert. Dann haben wir ein <b>Recordset<\/b>-Objekt auf Basis des in der in der Variablen <b>db <\/b>gespeicherten <b>Database<\/b>-Objekts ge&ouml;ffnet und &uuml;ber die <b>Execute<\/b>-Methode des <b>Database<\/b>-Objekts aus <b>db <\/b>einen neuen Datensatz erstellt.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TestDatenAktuell()\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;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblTest\", dbFailOnError\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblTest\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Anzahl vorher: \" & rst.RecordCount\r\n     db.Execute \"INSERT INTO tblTest(Test) VALUES(''''Test'''')\", dbFailOnError\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Anzahl nachher: \" & rst.RecordCount\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Anzahl CurrentDb: \" & CurrentDb.OpenRecordset(\"tblTest\").RecordCount\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Anzahl db\/rst neu: \" & db.OpenRecordset(\"tblTest\").RecordCount\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Test, wo neue Datens&auml;tze erfasst werden<\/span><\/b><\/p>\n<p>Das Recordset <b>rst <\/b>enth&auml;lt dann keine aktualisierten Daten und liefert den Wert <b>0<\/b> als Anzahl. Wenn wir die Anzahl &uuml;ber ein neues Recordset auf Basis von <b>CurrentDb <\/b>ermittelt, ist diese aktuell &#8211; genauso, wenn wir ein neues Recordset auf Basis von <b>db <\/b>erstellen. Sie k&ouml;nnen das Recordset also neu f&uuml;llen und erhalten dann auch die aktuellen Daten, auch wenn <b>db <\/b>mit <b>CurrentDb <\/b>in einem &auml;lteren Zustand des <b>Database<\/b>-Objekts gef&uuml;llt wurde.<\/p>\n<h2>Eigenschaften und Methoden des Database-Objekts<\/h2>\n<p>Das mit <b>CurrentDb <\/b>gef&uuml;llte <b>Database<\/b>-Objekt und der Direktzugriff mit <b>CurrentDb <\/b>liefert die gleichen Eigenschaften und Methoden, die wir im Anschluss betrachten:<\/p>\n<ul>\n<li><b>Close<\/b>: Schlie&szlig;t eine ge&ouml;ffnete Datenbank.<\/li>\n<li><b>CollatingOrder<\/b>: Legt die Sortierung f&uuml;r Zeichenfolgen in Textfeldern fest.<\/li>\n<li><b>Connect<\/b>: Liefert Informationen &uuml;ber die Verbindungszeichenfolge.<\/li>\n<li><b>Containers<\/b>: Liefert die Auflistung der <b>Container<\/b>-Objekte.<\/li>\n<li><b>CreateProperty<\/b>: Erstellt eine benutzerdefinierte Eigenschaft.<\/li>\n<li><b>CreateQueryDef<\/b>: Erstellt ein <b>QueryDef<\/b>-Objekt, also eine Abfrage.<\/li>\n<li><b>CreateRelation<\/b>: Erstellt ein <b>Relation<\/b>-Objekt, also eine Beziehung.<\/li>\n<li><b>CreateTableDef<\/b>: Erstellt ein <b>TableDef<\/b>-Objekt, also eine Tabelle.<\/li>\n<li><b>Execute<\/b>: F&uuml;hrt eine Aktionsabfrage durch.<\/li>\n<li><b>Name<\/b>: Gibt Pfad und Name der Datenbank aus.<\/li>\n<li><b>NewPassword<\/b>: &auml;ndert das Kennwort f&uuml;r die Datenbank.<\/li>\n<li><b>OpenRecordset<\/b>: Erstellt ein neues Recordset.<\/li>\n<li><b>Properties<\/b>: Liefert die Auflistung aller <b>Property<\/b>-Elemente des <b>Database<\/b>-Objekts.<\/li>\n<li><b>QueryDefs<\/b>: Liefert eine Auflistung aller <b>QueryDef<\/b>-Objekte, also Abfragen<\/li>\n<li><b>QueryTimeout<\/b>: Anzahl der Sekunden, die gewartet wird, bis ein Timeoutfehler auftritt, wenn eine Abfrage in einer ODBC-Datenquelle ausgef&uuml;hrt wird.<\/li>\n<li><b>RecordsAffected<\/b>: Liefert die Anzahl der von der letzten in dieser Sitzung ausgef&uuml;hrten Aktionsabfrage betroffenen Datens&auml;tze.<\/li>\n<li><b>Recordsets<\/b>: Liefert die Auflistung aller im Kontext des <b>Database<\/b>-Objekts ge&ouml;ffneten <b>Recordset<\/b>-Objekte.<\/li>\n<li><b>Relations<\/b>: Liefert die Auflistung der Relations, also Beziehungen.<\/li>\n<li><b>TableDefs<\/b>: Liefert die Auflistung der <b>TableDef<\/b>-Objekte der Datenbank, also der Tabellen.<\/li>\n<li><b>Transactions<\/b>: Gibt an, ob die Datenbank Transaktionen unterst&uuml;tzt.<\/li>\n<li><b>Updatable<\/b>: Gibt an, ob die Datenbank schreibgesch&uuml;tzt ge&ouml;ffnet ist.<\/li>\n<li><b>Version<\/b>: Liefert die Version der Datenbank-Engine, mit der die Datenbank erstellt wurde.<\/li>\n<li><b>DesignMasterID<\/b>, <b>MakeReplica<\/b>, <b>PopulatePartial<\/b>, <b>ReplicaID<\/b>, <b>Synchronize<\/b>: Eigenschaften f&uuml;r die Replikation, die seit Access 2013 nicht mehr unterst&uuml;tzt wird<\/li>\n<\/ul>\n<h2>Die Methode Close<\/h2>\n<p>Die <b>Close<\/b>-Methode schlie&szlig;t die aktuell ge&ouml;ffnete und mit dem <b>Database<\/b>-Objekt referenzierte Datenbank. Dies ist vor allem f&uuml;r Datenbanken interessant, die von einer ge&ouml;ffneten Datenbank aus per <b>OpenDatabase <\/b>ge&ouml;ffnet werden und dann wieder geschlossen werden sollen. Das folgende Beispiel &ouml;ffnet eine Datenbank namens <b>connect.accdb <\/b>im aktuellen Datenbankverzeichnis:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OpenAndClose()\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> db = DBEngine(0).OpenDatabase( CurrentProject.Path & \"\\connect.accdb\")\r\n     Stop\r\n     db.Close\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dann wird die Ausf&uuml;hrung mit der <b>Stop<\/b>-Anweisung unterbrochen. Sie k&ouml;nnen nun im Windows Explorer pr&uuml;fen, ob die Datenbank wirklich ge&ouml;ffnet ist &#8211; in diesem Fall sollte dann eine zus&auml;tzliche Datei mit der Endung <b>.laccdb <\/b>erscheinen. F&uuml;hren Sie die Prozedur weiter aus und rufen somit die <b>Close<\/b>-Methode des <b>Database<\/b>-Objekts auf, wird die Datenbank wieder geschlossen und die <b>.laccdb<\/b>-Datei verschwindet wieder.<\/p>\n<h2>Die Eigenschaft CollatingOrder<\/h2>\n<p>Diese Eigenschaft <b>CollatingOrder <\/b>legt die Sortierreihenfolge fest. Der Standardwert lautet <b>dbSortGeneral<\/b> (<b>1033<\/b>), was der Sortierung in den Sprachen Englisch, Franz&ouml;sisch, Deutsch, Portugiesisch, Italienisch und modernem Spanisch entspricht.<\/p>\n<p>Wenn Sie mit der <b>CreateDatabase<\/b>-Methode des <b>Workspace<\/b>-Objekts eine Datenbank erstellen und dabei mit dem Parameter Options einen anderen Wert &uuml;bergeben, k&ouml;nnen Sie diesen sp&auml;ter mit <b>CollatingOrder <\/b>auslesen:<\/p>\n<pre>DBEngine(0).CreateDatabase CurrentProject.Path  & \"\\dutch.accdb\", db_lang_dutch, dbversion120<\/pre>\n<p>Die <b>CollatingOrder <\/b>k&ouml;nnen Sie dann in der anschlie&szlig;end ge&ouml;ffneten Datenbank <b>dutch.accdb <\/b>wie folgt abfragen:<\/p>\n<pre>  CurrentDb.CollatingOrder\r\n  1043 <\/pre>\n<h2>Die Eigenschaft Connect<\/h2>\n<p>Diese Eigenschaft liefert beispielsweise beim &ouml;ffnen externer Dateien als Datenbank Informationen, die beim Verbinden &uuml;ber den <b>Connect<\/b>-Parameter angegeben wurden. Wenn Sie mit der <b>OpenDatabase<\/b>-Methode des <b>Workspace<\/b>-Objekts beispielsweise eine Excel-Datei wie die folgende &ouml;ffnen, gibt die <b>Connect<\/b>-Eigenschaft den Wert des letzten Parameter aus &#8211; hier also etwa <b>Excel 8.0;HDR=Yes<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ConnectEigenschaft()\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> db = DBEngine.OpenDatabase(CurrentProject.Path  & \"\\Excel.xlsx\", False, True, \"Excel 8.0;HDR=Yes;\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> db.Connect\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Auflistung Containers<\/h2>\n<p><!--30percent--><\/p>\n<p>Die <b>Containers<\/b>-Auflistung bietet neben den Auflistungsobjekten die beiden folgenden Methoden:<\/p>\n<ul>\n<li><b>Count<\/b>: Liefert die Anzahl der <b>Container<\/b>-Elemente.<\/li>\n<li><b>Refresh<\/b>: Aktualisiert die Auflistung.<\/li>\n<\/ul>\n<p>Mit der folgenden Prozedur geben wir ein paar Informationen zu den <b>Container<\/b>-Elementen aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ContainersAuflistung()\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>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Debug.Print<\/span> db.Containers.Count\r\n     For i = 0 To db.Containers.Count - 1\r\n         <span style=\"color:blue;\">Debug.Print<\/span> db.Containers(i).Name,  db.Containers(i).Documents.Count,  db.Containers(i).Properties.Count\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir die folgenden Ergebnisse:<\/p>\n<pre>DataAccessPages  0             6 \r\nDatabases        3             6 \r\nForms            0             6 \r\nModules          1             6 \r\nRelationships    1             6 \r\nReports          0             6 \r\nScripts          0             6 \r\nSysRel           0             6 \r\nTables           12            6<\/pre>\n<p>Wir entnehmen dieser Ausgabe schon, dass die <b>Container<\/b>-Elemente weitere Elemente wie etwa Datenbanken, sonst aber meistens Objekte der Datenbank enthalten. Die folgende Prozedur gibt beispielsweise die Namen aller Tabelle der Datenbank aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ContainerTablesAusgeben()\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\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> db = CurrentDb\r\n     For i = 0 To db.Containers(\"Tables\").Documents.Count - 1\r\n         <span style=\"color:blue;\">Debug.Print<\/span> db.Containers(\"Tables\").Documents(i).Name\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Methode CreateProperty<\/h2>\n<p>Diese Methode erstellt ein benutzerdefiniertes <b>Property<\/b>-Objekt f&uuml;r das <b>Database<\/b>-Objekt. Wozu braucht man das Beispielsweise, um Daten, die sonst vielleicht in einer Tabelle gespeichert werden, wie beispielsweise die Version des aktuellen Frontends einer Datenbank, an einer anderen Stelle zu speichern.<\/p>\n<p>Die folgende Prozedur erstellt eine neue Property mit der <b>CreateProperty<\/b>-Methode und &uuml;bergibt neben dem Namen noch den Datentyp (hier <b>dbText<\/b>) sowie den Wert f&uuml;r diese Property (hier <b>1.0.0.0<\/b>). Dann h&auml;ngt sie die Property mit der <b>Append<\/b>-Methode an die <b>Properties<\/b>-Auflistung an:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreatePropertyMethode()\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>prp<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> prp = db.CreateProperty(\"FEVersion\", dbText, \"1.0.0.0\")\r\n     db.Properties.Append prp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die folgende Prozedur liest die Property wieder aus und gibt den Wert im Direktbereich aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PropertyAuslesen()\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>prp<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> prp = db.Properties(\"FEVersion\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> prp.Value\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Um den Wert einer einmal erstellten Property zu erstellen, k&ouml;nnen Sie diesen einfach zuweisen:<\/p>\n<pre>db.Properties(\"FEVersion\").Value = \"1.0.0.1\"<\/pre>\n<p>Das liefert allerdings einen Fehler, wenn die Property noch nicht vorliegt. Dazu kombinieren wir dann die vorherigen Prozeduren:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PropertySetzen(strProperty<span style=\"color:blue;\"> As String<\/span>, strValue<span style=\"color:blue;\"> As String<\/span>)\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>prp<span style=\"color:blue;\"> As <\/span>DAO.Property\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> prp = db.Properties(strProperty)\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span>prp Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> prp = db.CreateProperty(strProperty,  dbText, strValue)\r\n         db.Properties.Append prp\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         prp.Value = strValue\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur versucht, die <b>Property <\/b>mit dem Namen aus <b>strProperty <\/b>zu referenzieren, allerdings bei deaktivierter Fehlerbehandlung. Ist <b>prp <\/b>danach leer, wird die Property neu angelegt, sonst einfach gef&uuml;llt.<\/p>\n<p>Die Methode CreateQueryDef<\/p>\n<p>Mit der Methode <b>CreateQueryDef <\/b>legen Sie ein neues <b>QueryDef<\/b>-Objekt, also eine Abfrage, in der aktuellen Datenbank an. Hier erledigen wir genau das mit der <b>CreateQueryDef<\/b>-Methode:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateQueryDefMethode()\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>qdf<span style=\"color:blue;\"> As <\/span>DAO.QueryDef\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> qdf = db.CreateQueryDef(\"qryTest\",  \"SELECT * FROM tblTest\")\r\n     ''''Nicht n&ouml;tig!\r\n     ''''db.QueryDefs.Append qdf\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese erh&auml;lt als ersten Parameter den Namen der zu erstellenden Abfrage und als zweiten den SQL-Ausdruck f&uuml;r die Abfrage. Beachten Sie: <b>CreateQueryDef <\/b>muss kein <b>QueryDefs.Append <\/b>folgen, da <b>QueryDef<\/b>-Objekte automatisch angeh&auml;ngt werden! Die Aktivierung des Navigationsbereichs und Bet&auml;tigen der Taste <b>F5 <\/b>liefert die Abfrage dann auch in den Navigationsbereich.<\/p>\n<h2>Die Methode CreateRelation<\/h2>\n<p>Die <b>CreateRelation<\/b>-Methode erstellt eine neue Beziehung zwischen zwei Tabellen. Ein Beispiel dazu schauen wir uns in einem sp&auml;teren Beitrag an.<\/p>\n<h2>Die Methode CreateTableDef<\/h2>\n<p>Die <b>CreateTableDef<\/b>-Methode haben Sie weiter oben bereits kennengelernt. Sie erstellt ein neues <b>TableDef<\/b>-Objekt, das Sie noch mit Feldern ausstatten m&uuml;ssen, bevor Sie es &uuml;ber die <b>Append<\/b>-Methode der <b>TableDefs<\/b>-Auflistung zur Datenbank hinzuf&uuml;gen.<\/p>\n<h2>Die Methode Execute<\/h2>\n<p>Mit der <b>Execute<\/b>-Methode k&ouml;nnen Sie SQL-Aktionsabfragen ausf&uuml;hren &#8211; beispielsweise so:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExecuteMethode()\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>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strSQL = \"INSERT INTO tblTest(ID, Test) VALUES(33, ''''bla'''')\"\r\n     db.Execute strSQL, dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Methode erwartet als ersten Parameter die SQL-Zeichenfolge. Der zweite Parameter ist optional und kann beispielsweise den Wert <b>dbFailOnError <\/b>entgegennehmen. Damit werden Fehler, die beim Ausf&uuml;hren der Abfrage auftreten, auch als VBA-Fehler ausgel&ouml;st.<\/p>\n<h2>Die Eigenschaft Name<\/h2>\n<p>Die Bezeichnung Name f&uuml;r diese Eigenschaft ist etwas irref&uuml;hrend. Sie liefert n&auml;mlich den Pfad zur Datenbank:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> CurrentDb.Name\r\n   C:\\...\\CurrentDb.accdb<\/pre>\n<h2>Die Methode NewPassword<\/h2>\n<p>Diese Methode erlaubt es, f&uuml;r eine exklusiv ge&ouml;ffnete Datenbank ein neues Kennwort zu vergeben. Um ein neues Kennwort zu vergeben, nutzen Sie die folgende Syntax:<\/p>\n<pre>CurrentDb.NewPassword \"\", \"password\"<\/pre>\n<p>Wenn das mit dem ersten Parameter &uuml;bergebene alte Kennwort nicht stimmt, wird der Fehler <b>3031 <\/b>(<b>Kein zul&auml;ssiges Kennwort.<\/b>) ausgel&ouml;st.<\/p>\n<p>Wenn Sie das Kennwort wieder l&ouml;schen wollen, ersetzen Sie das aktuelle Kennwort durch eine leere Zeichenkette:<\/p>\n<pre>CurrentDb.NewPassword \"password\", \"\"<\/pre>\n<p>Eine kennwortgesch&uuml;tzte Datenbank erfordert die Eingabe des Kennworts (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1111_003.png\" alt=\"Eingabe des Kennworts beim &ouml;ffnen einer Datenbank\" width=\"424,7115\" height=\"166,441\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Eingabe des Kennworts beim &ouml;ffnen einer Datenbank<\/span><\/b><\/p>\n<h2>Die Methode OpenRecordset<\/h2>\n<p>Mit der Methode <b>OpenRecordset <\/b>&ouml;ffnen Sie ein Recordset und liefern es als Objekt des Typs <b>Recordset <\/b>an eine entsprechende Variable, im folgenden Beispiel etwa an die Variable namens <b>rst<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OpenRecordsetMethode()\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;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblTest\")\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!ID\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In diesem Beispiel durchlaufen wir im Anschluss noch die Datens&auml;tze des Recordsets und geben jeweils den Wert des Feldes <b>ID <\/b>im Direktbereich aus.<\/p>\n<h2>Die Auflistung Properties<\/h2>\n<p>Die <b>Properties<\/b>-Auflistung erlaubt den Zugriff auf die eingebauten und auch auf die benutzerdefinierten <b>Property<\/b>-Elemente. Im folgenden Beispiel durchlaufen wir alle <b>Property<\/b>-Elemente und geben Namen und Werte im Direktbereich aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PropertiesAuflistung()\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>prp<span style=\"color:blue;\"> As <\/span>Dao.Property\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each prp In db.Properties\r\n         <span style=\"color:blue;\">Debug.Print<\/span> prp.Name,\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> prp.Value\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Err.Number = 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"[\" & prp.Name & \"]\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">Next<\/span> prp\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier haben wir eine Fehlerbehandlung eingebaut, denn bei manchen <b>Property<\/b>-Typen ist keine Ausgabe m&ouml;glich. In diesem Fall soll der <b>Property<\/b>-Name in eckigen Klammern ausgegeben werden.<\/p>\n<p>Auf Properties k&ouml;nnen Sie auch noch &uuml;ber den Index oder &uuml;ber den Namen zugreifen &#8211; hier zun&auml;chst, um den <b>Namen <\/b>der Property mit dem Index <b>0 <\/b>zu ermitteln:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> CurrentDb.Properties(0).Name\r\nName<\/pre>\n<p>Dann lassen wir den Wert &uuml;ber den Namen als Parameter ausgeben:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> CurrentDb.Properties(\"Name\").Value\r\nC:\\...\\CurrentDb.accdb<\/pre>\n<h2>Die Auflistung QueryDefs<\/h2>\n<p>Die <b>QueryDefs<\/b>-Auflistung liefert alle in der Datenbank gespeicherten <b>QueryDef<\/b>-Elemente, also die Objekte, welche Abfragen repr&auml;sentieren. Diese k&ouml;nne Sie in einer Schleife durchlaufen und beispielsweise im Direktfenster ausgeben:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>QueryDefsAuflistung()\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>qdf<span style=\"color:blue;\"> As <\/span>DAO.QueryDef\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each qdf In db.QueryDefs\r\n         <span style=\"color:blue;\">Debug.Print<\/span> qdf.Name\r\n     <span style=\"color:blue;\">Next<\/span> qdf\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Eigenschaft QueryTimeout<\/h2>\n<p>Mit der Eigenschaft <b>QueryTimeout <\/b>legen Sie fest, nach wieviel Sekunden die Datenbank beim Zugriff auf eine Abfrage ein Timeout melden soll.<\/p>\n<h2>Die Eigenschaft RecordsAffected<\/h2>\n<p>Die Eigenschaft <b>RecordsAffected <\/b>nutzen Sie, um zu ermitteln, wie viele Datens&auml;tze von der zuletzt in dieser Sitzung per <b>Execute <\/b>ausgef&uuml;hrten Aktionsabfrage betroffen waren:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>RecordsAffectedEigenschaft()\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> db = CurrentDb\r\n     db.Execute \"INSERT INTO tblTest(ID, Test)  VALUES(2, ''''blub'''')\", dbFailOnError\r\n     <span style=\"color:blue;\">Debug.Print<\/span> db.RecordsAffected\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Auflistung Recordsets<\/h2>\n<p>Diese Auflistung liefert alle Recordsets, die im Rahmen des angegebenen <b>Database<\/b>-Objekts ge&ouml;ffnet sind:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>RecordsetsAuflistung()\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;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"tblTest\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> db.Recordsets.Count\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Auflistung Relations<\/h2>\n<p>Die <b>Relations<\/b>-Auflistung liefert eine Liste aller in der Datenbank definierten Beziehungen. Die folgende Prozedur gibt die Namen aller Relationen aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>RelationsAuflistung()\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>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each rel In db.Relations\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rel.Name\r\n     <span style=\"color:blue;\">Next<\/span> rel\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Die Auflistung TableDefs<\/h2>\n<p>Die <b>TableDefs<\/b>-Auflistung liefert eine Auflistung, mit der Sie auf die <b>TableDef<\/b>-Elemente der Datenbank zugreifen k&ouml;nnen. Ein <b>TableDef<\/b>-Element repr&auml;sentiert eine Tabelle.<\/p>\n<p>Die Auflistung bietet vier Elemente an:<\/p>\n<ul>\n<li><b>Append<\/b>: H&auml;ngt das als Parameter mit dem Datentyp <b>TableDef <\/b>angegebene, neu erstellte <b>TableDef<\/b>-Element an die Auflistung an. Ein solches erstellen Sie mit der <b>CreateTableDef<\/b>-Methode.<\/li>\n<li><b>Count<\/b>: Liefert die Anzahl der <b>TableDef<\/b>-Elemente.<\/li>\n<li><b>Delete<\/b>: L&ouml;scht das <b>TableDef<\/b>-Element mit dem als Parameter angegebenen Namen.<\/li>\n<li><b>Refresh<\/b>: Aktualisiert die Auflistung.<\/li>\n<\/ul>\n<p>Die folgende Prozedur zeigt ein paar Features der <b>TableDefs<\/b>-Auflistung:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TableDefsAuflistungRefresh()\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>tdf<span style=\"color:blue;\"> As <\/span>DAO.TableDef\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     CurrentDb.TableDefs.Delete (\"tblTest\")\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen vorher: \" & db.TableDefs.Count\r\n     <span style=\"color:blue;\">Set<\/span> tdf = CurrentDb.CreateTableDef(\"tblTest\")\r\n     <span style=\"color:blue;\">Set<\/span> fld = tdf.CreateField(\"ID\", dbLong)\r\n     tdf.Fields.Append fld\r\n     <span style=\"color:blue;\">Set<\/span> fld = tdf.CreateField(\"Test\", dbText)\r\n     tdf.Fields.Append fld\r\n     CurrentDb.TableDefs.Append tdf\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen vor Refresh: \" &  db.TableDefs.Count\r\n     db.TableDefs.Refresh\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Tabellen nach Refresh: \" &  db.TableDefs.Count\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier z&auml;hlen wir die <b>TableDef<\/b>-Objekt mit der <b>Count<\/b>-Methode des in <b>db <\/b>gespeicherten <b>Database<\/b>-Objekts. Dann legen wir eine neue Tabelle an, allerdings nicht &uuml;ber das in <b>db <\/b>gespeicherte <b>Database<\/b>-Objekt, sondern &uuml;ber <b>CurrentDb<\/b>.<\/p>\n<p>Die <b>TableDefs<\/b>-Auflistung von <b>db <\/b>liefert dann zun&auml;chst keine ge&auml;nderte Anzahl, aber nach dem Aufruf der <b>Refresh<\/b>-Methode der <b>TableDefs<\/b>-Auflistung erscheint das neue <b>TableDef<\/b>-Objekt auch hier.<\/p>\n<h2>Die Eigenschaft Transactions<\/h2>\n<p>Wenn die Eigenschaft <b>Transactions <\/b>den Wert <b>True <\/b>liefert, k&ouml;nnen Sie mit der Datenbank Transaktionen ausf&uuml;hren. Dazu verwenden Sie die Methoden <b>BeginTrans<\/b>, <b>CommitTrans <\/b>und <b>Rollback <\/b>des <b>Workspace<\/b>-Objekts f&uuml;r die aktuelle Sitzung.<\/p>\n<h2>Die Eigenschaft Updatable<\/h2>\n<p>Wenn Sie eine Datenbank schreibgesch&uuml;tzt &ouml;ffnen, was beispielsweise &uuml;ber den &ouml;ffnen-Dialog aus Bild 2 m&ouml;glich ist, liefert die Eigenschaft <b>Updatable <\/b>den Wert <b>False<\/b>. Ist die Datenbank hingegen nicht schreibgesch&uuml;tzt, was der Regelfall ist, liefert die Eigenschaft den Wert <b>True<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1111_002.png\" alt=\"&ouml;ffnen einer Datenbank im schreibgesch&uuml;tzten Modus\" width=\"649,559\" height=\"422,2608\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: &ouml;ffnen einer Datenbank im schreibgesch&uuml;tzten Modus<\/span><\/b><\/p>\n<h2>Die Eigenschaft Version<\/h2>\n<p>Mit der Eigenschaft <b>Version<\/b> k&ouml;nnen Sie die Version der Datenbank-Engine ermitteln, mit der die mit dem <b>Database<\/b>-Objekt referenzierte Datenbank erstellt wurde. Wenn wir diesen Befehl im Direktfenster f&uuml;r das mit <b>CurrentDb <\/b>ermittelte <b>Database<\/b>-Objekt ermitteln, erhalten wir dieses Ergebnis:<\/p>\n<pre>  CurrentCb.Version\r\n12.0<\/pre>\n<p>Was aber ist denn nun die Datenbank-Engine Ein Blick in den <b>Verweise<\/b>-Dialog liefert zum Beispiel f&uuml;r Access 2016 das Bild aus Bild 3. Hier findet sich der Eintrag <b>Microsoft Office16.0 Access database engine object<\/b>. Aber wir haben doch soeben als Version den Wert <b>12.0 <\/b>erhalten<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_1111_001.png\" alt=\"Verweise-Dialog mit der Database-Engine\" width=\"424,7115\" height=\"334,8159\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Verweise-Dialog mit der Database-Engine<\/span><\/b><\/p>\n<p>Den Wert <b>16.0 <\/b>in der Versionsbezeichnung des Verweises k&ouml;nnen Sie vernachl&auml;ssigen. F&uuml;r aktuelle Access-Versionen erhalten Sie f&uuml;r <b>.mdb<\/b>-Dateien n&auml;mlich immer den Wert <b>4.0 <\/b>und f&uuml;r <b>.accdb<\/b>-Dateien den Wert <b>12.0<\/b>.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Normalerweise nutzt man immer die gleich paar Befehle, Methoden und Eigenschaften beim Programmieren. Es kann jedoch nicht schaden, einmal einen genaueren Blick auf das Objektmodell verschiedener Objekte zu werfen &#8211; es kommen immer wieder interessante Elemente zum Vorschein, die sie fr&uuml;her oder sp&auml;ter sinnvoll einsetzen k&ouml;nnen.<\/p>\n<p>In weiteren Beitr&auml;gen sehen wir uns weitere Teile des Objektmodells von Access, DAO, ADO und anderen Bibliotheken an, die bei der Programmierung von Access-Anwendungen zum Tragen kommen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>CurrentDb.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/BB5A4BCC-FEA6-4EBB-A110-388792B9047A\/aiu_1111.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Zugriff auf die Objekte der aktuellen Datenbank erfolgt in vielen F&auml;llen &uuml;ber eine Objektvariable mit dem Datentyp Database. Diese wird dann mit der CurrentDb-Funktion gef&uuml;llt. Der Zugriff auf die aktuelle Datenbank kann dabei auch direkt &uuml;ber CurrentDb erfolgen. Dieser Beitrag liefert Informationen &uuml;ber die Eigenschaften und Methoden des Database-Objekts.<\/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":[662017,66062017,44000025],"tags":[],"class_list":["post-55001111","post","type-post","status-publish","format-standard","hentry","category-662017","category-66062017","category-VBA_und_Programmiertechniken"],"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 CurrentDb-Funktion und das Database-Objekt - 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_CurrentDbFunktion_und_das_DatabaseObjekt\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Die CurrentDb-Funktion und das Database-Objekt\" \/>\n<meta property=\"og:description\" content=\"Der Zugriff auf die Objekte der aktuellen Datenbank erfolgt in vielen F&auml;llen &uuml;ber eine Objektvariable mit dem Datentyp Database. Diese wird dann mit der CurrentDb-Funktion gef&uuml;llt. Der Zugriff auf die aktuelle Datenbank kann dabei auch direkt &uuml;ber CurrentDb erfolgen. Dieser Beitrag liefert Informationen &uuml;ber die Eigenschaften und Methoden des Database-Objekts.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:27:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab\" \/>\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=\"16\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_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Die CurrentDb-Funktion und das Database-Objekt\",\"datePublished\":\"2020-05-13T21:27:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/\"},\"wordCount\":2400,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b11f4e0aed8249388af3bb6958cb65ab\",\"articleSection\":[\"2017\",\"6\\\/2017\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/\",\"name\":\"Die CurrentDb-Funktion und das Database-Objekt - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b11f4e0aed8249388af3bb6958cb65ab\",\"datePublished\":\"2020-05-13T21:27:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b11f4e0aed8249388af3bb6958cb65ab\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/b11f4e0aed8249388af3bb6958cb65ab\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Die CurrentDb-Funktion und das Database-Objekt\"}]},{\"@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 CurrentDb-Funktion und das Database-Objekt - 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_CurrentDbFunktion_und_das_DatabaseObjekt\/","og_locale":"de_DE","og_type":"article","og_title":"Die CurrentDb-Funktion und das Database-Objekt","og_description":"Der Zugriff auf die Objekte der aktuellen Datenbank erfolgt in vielen F&auml;llen &uuml;ber eine Objektvariable mit dem Datentyp Database. Diese wird dann mit der CurrentDb-Funktion gef&uuml;llt. Der Zugriff auf die aktuelle Datenbank kann dabei auch direkt &uuml;ber CurrentDb erfolgen. Dieser Beitrag liefert Informationen &uuml;ber die Eigenschaften und Methoden des Database-Objekts.","og_url":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:27:57+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Die CurrentDb-Funktion und das Database-Objekt","datePublished":"2020-05-13T21:27:57+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/"},"wordCount":2400,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab","articleSection":["2017","6\/2017","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/","url":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/","name":"Die CurrentDb-Funktion und das Database-Objekt - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab","datePublished":"2020-05-13T21:27:57+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/b11f4e0aed8249388af3bb6958cb65ab"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Die_CurrentDbFunktion_und_das_DatabaseObjekt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Die CurrentDb-Funktion und das Database-Objekt"}]},{"@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\/55001111","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=55001111"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001111\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}