{"id":55000886,"date":"2013-06-01T00:00:00","date_gmt":"2020-05-22T21:35:52","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=886"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Funktionen_aus_anderen_Datenbanken","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/","title":{"rendered":"Funktionen aus anderen Datenbanken"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manche Funktionen ben&ouml;tigen Sie nicht nur in einer, sondern in mehreren Datenbanken. Sie k&ouml;nnen die Funktion dann in die jeweiligen Datenbanken kopieren und dort nutzen. Dies bringt allerdings einigen Mehraufwand bei der Pflege der Funktion mit sich: Wenn Sie etwa einen Fehler beheben, m&uuml;ssen Sie dies gleich f&uuml;r mehrere Datenbanken erledigen. Beim zentralen Speichern der Funktion in einer einzigen Datenbankdatei brauchen Sie &auml;nderungen nur an einer einzigen Stelle durchzuf&uuml;hren. Und es gibt noch weitere Vorteile und Anwendungszwecke &#8211; mehr dazu im vorliegenden Beitrag.<\/b><\/p>\n<p>Der Grund daf&uuml;r, die in diesem Beitrag vorgestellten Techniken zu verwenden, ist die L&ouml;sung aus einem anderen Beitrag namens <b>Alle Datenbanken einlesen und anzeigen <\/b>(<b>www.access-im-unternehmen.de\/888<\/b>). Dort stellen wir ein Add-In vor, mit dem Sie den Pfad zu einer bestimmten Access-Datenbank ermitteln k&ouml;nnen. Dabei liefert das Add-In nur die Verzeichnisse, in denen sich auch tats&auml;chlich Access-Datenbankdateien befinden.<\/p>\n<p>Das Problem dieses Add-Ins und von Add-Ins im Allgemeinen ist: Es gibt keinen einfachen Weg, die enthaltenen Funktionen aufzurufen und die Ergebnisse direkt etwa per VBA in ein Textfeld zu schreiben. Gerade beim Ermitteln von Verzeichnissen und Datenbankdateien w&auml;re dies aber sinnvoll &#8211; anderenfalls m&uuml;sste man immer den Pfad aus dem Add-In-Formular kopieren und an der gew&uuml;nschten Stelle eintragen. Au&szlig;erdem lassen sich Add-Ins und ihre Funktionen nur &uuml;ber genau definierte Schnittstellen aufrufen &#8211; beispielsweise &uuml;ber das Add-Ins-Men&uuml; oder als Objekt- oder Steuerelement-Assistent. Wenn Sie die Funktion aber etwa &uuml;ber die neben einem Textfeld platzierte Schaltfl&auml;che aufrufen und das Ergebnis in das Textfeld eintragen m&ouml;chten, m&uuml;ssen Sie selbst eine L&ouml;sung per VBA erstellen.<\/p>\n<p>Dies ist, um beim Beispiel der Datenbankauswahl zu bleiben, auch kein Problem &#8211; Sie brauchen einfach nur alle Objekte der Add-In-Datenbank in die Zieldatenbank zu kopieren und die dort enthaltene Funktion zum Starten des Add-Ins aufzurufen. Praktischer w&auml;re es dennoch, wenn Sie eine solche Funktion an zentraler Stelle vorhalten und aufrufen k&ouml;nnten, statt diese in mehrere Datenbanken zu integrieren und dort auch separat pflegen zu m&uuml;ssen.<\/p>\n<p><b>Der Ansatz<\/b><\/p>\n<p>Der nachfolgend vorgestellte Ansatz basiert grunds&auml;tzlich darauf, eine Bibliotheksdatenbank mit allgemeinen Funktionen in die Zieldatenbank einzubinden und die Funktionen der Bibliotheksdatenbank in der Zieldatenbank verf&uuml;gbar zu machen. Allerdings ist f&uuml;r diese Vorgehensweise ein fester Verweis auf die Bibliotheksdatenbank n&ouml;tig. Verschieben Sie die Funktionsbibliothek, liefert die Zieldatenbank beim Aufruf einer der Funktionen einen Fehler.<\/p>\n<p>Bei der in diesem Beitrag verwendeten Technik wird die Bibliotheksdatenbank quasi per Late Binding referenziert, also erst kurz vor dem Zugriff auf die enthaltenen Funktionen. Das bedeutet, dass wir vor dem Binden noch pr&uuml;fen k&ouml;nnen, ob die Funktionsbibliothek an Ort und Stelle ist.<\/p>\n<p>Falls nicht, liefern Sie dem Benutzer eine aussagekr&auml;ftige Meldung und bitten ihn, die Bibliotheksdatenbank an die gew&uuml;nschte Stelle zu kopieren.<\/p>\n<p><b>Entwickler oder Benutzer<\/b><\/p>\n<p>Grunds&auml;tzlich sollten Sie jedoch &uuml;berlegen, ob Sie die vorgestellten Techniken nur f&uuml;r den Zeitraum der Entwicklung nutzen oder ob auch der Benutzer die Bibliotheken erhalten soll. Sie als Entwickler haben (hoffentlich) einen genauen &Uuml;berblick dar&uuml;ber, wo eine Datenbankanwendung auf Bibliotheken zugreift, und k&ouml;nnen gegebenenfalls schnell mal einen Pfad anpassen.<\/p>\n<p>Wenn Sie in den Anwendungen, die Sie an Benutzer weitergeben, ebenfalls mit Funktionsbibliotheken arbeiten m&ouml;chten, k&ouml;nnte der Betrieb nat&uuml;rlich durch fehlende Bibliotheksdateien gest&ouml;rt werden.<\/p>\n<p>Wenn zur Weitergabe vorgesehene Datenbankdateien hingegen alle notwendigen Funktionen im eigenen VBA-Projekt enthalten, entf&auml;llt diese Gefahr. Daf&uuml;r ist bei Aktualisierungen in den Bibliotheksfunktionen gleich das ganze Frontend auszutauschen.<\/p>\n<p>In diesem Beitrag erl&auml;utern wir, wie Sie das Einbinden externer Funktionen per Late Binding als Entwickler nutzen k&ouml;nnen.<\/p>\n<p><b>Funktionsbibliothek erstellen<\/b><\/p>\n<p>Die Funktionsbibliothek muss eine wichtige Voraussetzung erf&uuml;llen: Sie muss als Add-In gekennzeichnet werden.<\/p>\n<p>Das ist allerdings im Handumdrehen erledigt &#8211; Sie passen dazu lediglich die Dateiendung an:<\/p>\n<ul>\n<li class=\"aufz-hlung\">aus <b>.mdb <\/b>wird <b>.mda <\/b>und<\/li>\n<li class=\"aufz-hlung\">aus <b>.accdb <\/b>wird <b>.accda<\/b>.<\/li>\n<\/ul>\n<p>Sprich: Sie ersetzen einfach nur das <b>b <\/b>durch das <b>a<\/b>. <\/p>\n<p>Und, was noch besser ist &#8211; im Hinblick auf die eventuelle Weitergabe einer solchen Code-Bibliothek: Sie k&ouml;nnen auch eine als <b>.mde <\/b>oder <b>.accde <\/b>erstellte Datenbankdatei in eine <b>.mda <\/b>oder <b>.accda<\/b>-Bibliothek umwandeln.<\/p>\n<p><b>Begriffskl&auml;rung<\/b><\/p>\n<p>Im Folgenden sollen die aufrufende Anwendung Host-Anwendung und die Anwendung mit den aufgerufenen Funktionen Add-In-Anwendung hei&szlig;en.<\/p>\n<p><b>Einfache Funktion aufrufen<\/b><\/p>\n<p>Beginnen wir mit dem ersten Beispiel. Dabei soll die Host-Anwendung eine einfache Funktion in der Add-In-Anwendung aufrufen.<\/p>\n<p>Erstellen Sie also eine Add-In-Anwendung, die sich lediglich durch den Buchstaben a in der Dateiendung als solche zu erkennen gibt. Die sonst bei Add-Ins &uuml;blichen Ma&szlig;nahmen brauchen Sie nicht zu treffen.<\/p>\n<p>Legen Sie dann ein Standardmodul beliebigen Namens in der Add-In-Datenbank an und f&uuml;gen Sie dort die folgende Funktion hinzu:<\/p>\n<pre>Public Function Meldungsfenster()\r\n    MsgBox &quot;Einfaches Meldungsfenster&quot;, vbOKOnly, &quot;Add-In&quot;\r\nEnd Function<\/pre>\n<p>Der Test der Funktion zeigt das Meldungsfenster an. Nun schlie&szlig;en Sie die Add-In-Anwendung und erstellen beziehungsweise &ouml;ffnen die Host-Anwendung.<\/p>\n<p>Damit wir direkt von der Benutzeroberfl&auml;che aus arbeiten, legen Sie ein neues Formular in der Host-Anwendung an und f&uuml;gen diesem eine Schaltfl&auml;che namens <b>cmdMeldungsfenster<\/b> hinzu.<\/p>\n<p>Legen Sie f&uuml;r diese Schaltfl&auml;che die folgende Ereignisprozedur an, die durch das <b>Beim Klicken<\/b>-Ereignis ausgel&ouml;st wird:<\/p>\n<pre>Private Sub cmdMeldungsfenster_Click()\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.Meldungsfenster&quot;\r\nEnd Sub<\/pre>\n<p>Lassen Sie uns die einzige Anweisung dieser Prozedur auseinandernehmen: Der Aufruf der Funktion in der Add-In-Datenbank wird also durch die <b>Run<\/b>-Funktion des <b>Application<\/b>-Objekts erreicht. Diese erwartet als Parameter das Verzeichnis und den Namen der Add-In-Anwendung sowie den Namen der auszuf&uuml;hrenden Funktion.<\/p>\n<p><b>CurrentProject.Path <\/b>ermittelt in diesem Beispiel den Pfad der aktuellen Datenbank. Damit das Beispiel funktioniert, muss sich die Add-In-Datenbank also im gleichen Verzeichnis wie die Host-Datenbank befinden.<\/p>\n<p>&Ouml;ffnen Sie das Formular nun in der Formularansicht und klicken Sie auf die Schaltfl&auml;che. Dies sollte das Meldungsfenster aus Bild 1 hervorrufen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Aufruf eines Meldungsfensters aus einer anderen Datenbank<\/span><\/b><\/p>\n<p><b>Speicherort der Add-In-Datenbank<\/b><\/p>\n<p>Sie k&ouml;nnen die Add-In-Datenbank nat&uuml;rlich auch an jedem anderen Ort speichern &#8211; Sie m&uuml;ssen lediglich sicherstellen, dass diese an dem in der <b>Run<\/b>-Funktion angegebenen Ort liegt. Auch Folgendes w&auml;re machbar, wenn sich die Add-In-Anwendung direkt im Verzeichnis <b>c:\\ <\/b>befindet:<\/p>\n<pre>Application.Run &quot;c:\\Ziel.Meldungsfenster&quot;<\/pre>\n<p>Hier ist deutlicher zu erkennen, dass Sie nur den Namen der Add-In-Anwendung angeben m&uuml;ssen und nicht die Dateiendung. Stattdessen tragen Sie hinter dem Punkt den Namen der aufzurufenden Funktion ein, hier <b>Meldungsfenster<\/b>. Damit geht einher, dass Sie nicht gleichzeitig etwa eine Add-In-Anwendung namens <b>Ziel.mda <\/b>und <b>Ziel.accda <\/b>einsetzen sollten. Das Dateisystem kann beide Dateien zwar unterscheiden, aber nicht die <b>Run<\/b>-Funkion.<\/p>\n<p>Wenn Sie die Beispieldatenbanken ausprobieren m&ouml;chten, speichern Sie <b>Start.mdb <\/b>und <b>Ziel.mda <\/b>im gleichen Verzeichnis, da hier die <b>CurrentProject.Path<\/b>-Methode zum Ermitteln des Dateipfades der Add-In-Anwendung verwendet wird.<\/p>\n<p><!--30percent--><\/p>\n<p><b>Was geschieht<\/b><\/p>\n<p>Bevor wir mit weiteren Beispielen fortfahren, schauen wir uns an, was sich mittlerweile im VBA-Editor getan hat. Diesen aktivieren Sie am schnellsten mit einer der Tastenkombinationen <b>Strg + G <\/b>oder <b>Alt + F11<\/b>.<\/p>\n<p>Der VBA-Editor zeigt im Objekt-Explorer nunmehr nicht nur das VBA-Projekt der aktuell ge&ouml;ffneten Host-Anwendung an, sondern zus&auml;tzlich das der Add-In-Anwendung (s. Bild 2). Daran ist zu erkennen, dass Access das VBA-Projekt der verwendeten Add-In-Anwendung quasi eingebunden hat &#8211; auch wenn der Verweise-Dialog keinen Verweis auf die Add-In-Anwendung aufweist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Anzeige der VBA-Projekte der Host- und der Add-In-Anwendung<\/span><\/b><\/p>\n<p>Hier sind nun folgende Dinge zu beachten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie k&ouml;nnen zwar den Code im VBA-Projekt der Add-In-Anwendung &auml;ndern und diesen auch ausprobieren. Allerdings werden Sie beim Schlie&szlig;en der Host-Anwendung und beim anschlie&szlig;enden separaten &Ouml;ffnen des VBA-Projekts der Add-In-Anwendung feststellen, dass s&auml;mtliche &auml;nderungen verlorengegangen sind. Also: Sie k&ouml;nnen nat&uuml;rlich schnell mal eine &auml;nderung vornehmen, um diese auszuprobieren &#8211; aber schlie&szlig;en Sie die Host-Anwendung dann niemals, ohne den ge&auml;nderten Code zu kopieren und anschlie&szlig;end direkt in die Add-In-Anwendung einzupflegen!<\/li>\n<li class=\"aufz-hlung\">Das VBA-Projekt der Add-In-Anwendung bleibt bis zum Schlie&szlig;en der Host-Anwendung im Projekt-Explorer erhalten. Sie k&ouml;nnen also nicht etwa im VBA-Code einen Verweis auf das Projekt setzen und die Instanz durch Leeren des Verweises im Nirwana verschwinden lassen.<\/li>\n<\/ul>\n<p><b>Sub oder Funktion<\/b><\/p>\n<p>W&auml;hrend Sie beim Aufruf eines Access-Add-Ins &uuml;ber die Benutzeroberfl&auml;che, also etwa &uuml;ber das Add-Ins-Men&uuml;, nur VBA-Functions verwenden k&ouml;nnen, erlaubt die <b>Run<\/b>-Funktion auch den Einsatz von Sub-Prozeduren. Die folgende Prozedur in der Add-In-Datenbank w&uuml;rde also den gleichen Effekt bewirken:<\/p>\n<pre>Public Sub Meldungsfenster_Sub()\r\n    MsgBox &quot;Einfaches Meldungsfenster aus einer Sub&quot;, vbOKOnly, &quot;Add-In&quot;\r\nEnd Sub<\/pre>\n<p>Der folgende Aufruf startet diese Prozedur (siehe Schaltfl&auml;che <b>cmdMeldungsfensterSub <\/b>im Beispielformular):<\/p>\n<pre>    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.Meldungsfenster_Sub&quot;<\/pre>\n<p>Dies zeigt ebenfalls das erwartete Meldungsfenster an.<\/p>\n<p><b>Funktion mit R&uuml;ckgabewert<\/b><\/p>\n<p>Im n&auml;chsten Beispiel erfahren Sie, wie Sie von der Funktion in der Add-In-Datenbank einen Funktionswert zur&uuml;ckgeben lassen. Legen Sie dazu im Standardmodul der Add-In-Datenbank die folgende Funktion an:<\/p>\n<pre>Public Function Rueckgabewert() As String\r\n    Rueckgabewert = &quot;Wert von Add-In&quot;\r\nEnd Function<\/pre>\n<p>Diese Funktion liefert auf herk&ouml;mmliche Weise eine Zeichenkette als Funktionswert an die aufrufende Anweisung.<\/p>\n<p>Im Beispielformular finden Sie den Aufruf dieser Funktion in der Prozedur <b>cmdRueckgabewert_Click<\/b>. Der Unterschied zum vorherigen Beispiel ist, dass wir das Ergebnis der <b>Run<\/b>-Funktion in der Variablen <b>strTest <\/b>speichern und anschlie&szlig;end in einem Meldungsfenster ausgeben.<\/p>\n<p>Wichtig ist dabei, dass Sie den Parameter der <b>Run<\/b>-Funktion in Klammern einfassen:<\/p>\n<pre>Private Sub cmdRueckgabewert_Click()\r\n    Dim strTest As String\r\n    strTest = Application.Run(CurrentProject.Path &amp; &quot;\\Ziel.Rueckgabewert&quot;)\r\n    MsgBox &quot;Funktionswert von Add-In: ''&quot; &amp; strTest &amp; &quot;''&quot;, vbOKOnly, &quot;Host&quot;\r\nEnd Sub<\/pre>\n<p>Auch dies gelingt ohne Probleme, wie Bild 3 zeigt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Ein von einer Add-In-Funktion erhaltener R&uuml;ckgabewert<\/span><\/b><\/p>\n<p><b>Wert an Add-In &uuml;bergeben<\/b><\/p>\n<p>Dies funktioniert auch vom Host zum Add-In. Die folgende Add-In-Funktion erwartet eine Zeichenkette als Parameter und gibt diese per Meldungsfenster aus:<\/p>\n<pre>Public Function WertUebergeben(strWert As String)\r\n    MsgBox &quot;An Add-In &uuml;bergebener Wert: &quot; &amp; strWert, vbOKOnly, &quot;Add-In&quot;\r\nEnd Function<\/pre>\n<p>Der folgende Aufruf unterscheidet sich von den vorherigen, da nicht nur Add-In-Anwendung und Zielfunktion als Parameter angegeben werden, sondern noch ein weiterer Parameter zum Einsatz kommt &#8211; und dieser nimmt den Funktionsparameter auf. Im Beispiel soll der Inhalt des Textfeldes <b>txtParameter<\/b> des Formulars <b>frmBeispiele <\/b>an die Add-In-Funktion &uuml;bergeben werden:<\/p>\n<pre>Private Sub cmdParameter_Click()\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.WertUebergeben&quot;, Me!txtParameter\r\nEnd Sub<\/pre>\n<p>Die Add-In-Funktion liefert den aktuellen Wert des Textfeldes als Inhalt eines Meldungsfensters (s. Bild 4).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Dieses Meldungsfenster wird wiederum von der Add-In-Anwendung erzeugt.<\/span><\/b><\/p>\n<p><b>R&uuml;ckgabeparameter<\/b><\/p>\n<p>Die Parameter herk&ouml;mmlicher VBA-Prozeduren k&ouml;nnen Sie, sofern diese nicht explizit mit dem Schl&uuml;sselwort <b>ByVal <\/b>gekennzeichnet sind, mit Werten f&uuml;llen, die von der aufrufenden Routine weiterverwendet werden k&ouml;nnen. Voraussetzung daf&uuml;r ist, dass bereits beim Aufruf der Prozedur eine Variable als Parameter &uuml;bergeben wurde.<\/p>\n<p>Dies gelingt auch bei Add-In-Funktionen. Die folgende Funktion enth&auml;lt mit <b>strHin <\/b>einen <b>String<\/b>-Parameter. Die Funktion gibt den &uuml;bergebenen Wert zun&auml;chst per Meldungsfenster aus und &auml;ndert den Wert des Parameters dann:<\/p>\n<pre>Public Function HinUndZurueck(strHin As String)\r\n    MsgBox &quot;Empfangen wurde: &quot; &amp; strHin, vbOKOnly, &quot;Add-In&quot;\r\n    strHin = &quot;Zurueck&quot;\r\nEnd Function<\/pre>\n<p>Die Prozedur, die durch die Schaltfl&auml;che <b>cmdRueckgabeparameter<\/b> im Beispielformular ausgel&ouml;st wird, deklariert eine Variable namens <b>strHinZurueck <\/b>und &uuml;bergibt diese als zweiten Parameter der <b>Run<\/b>-Funktion. Anschlie&szlig;end gibt sie den Wert der als Parameter verwendeten und in der Funktion ge&auml;nderten Variablen in einem Meldungsfenster aus:<\/p>\n<pre>Private Sub cmdRueckgabeparameter_Click()\r\n    Dim strHinZurueck As String\r\n    strHinZurueck = &quot;Hin&quot;\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.HinUndZurueck&quot;, strHinZurueck\r\n    MsgBox &quot;Zurueckgegeben wurde: &quot; &amp; strHinZurueck, vbOKOnly, &quot;Host&quot;\r\nEnd Sub<\/pre>\n<p><b>Parameter verschiedener Datentypen<\/b><\/p>\n<p>Sie k&ouml;nnen Parameter verschiedener Datentypen &uuml;bergeben &#8211; sogar Objektvariablen etwa mit einem Verweis auf das <b>Database<\/b>-Objekt. Die folgende Beispielfunktion in der Add-In-Anwendung erwartet drei Parameter und speichert diese in <b>Variant<\/b>-Variablen. Die folgenden <b>MsgBox<\/b>-Anweisungen geben Name und Datentyp der Variablen aus &#8211; im Falle der dritten Variablen auch noch die Eigenschaft <b>Name<\/b>:<\/p>\n<pre>Public Function Datentypen(var1 As Variant, var2 As Variant, obj As Variant)\r\n    MsgBox &quot;Datentyp var1: &quot; &amp; TypeName(var1)\r\n    MsgBox &quot;Datentyp var2: &quot; &amp; TypeName(var2)\r\n    MsgBox &quot;Datentyp var3: &quot; &amp; TypeName(obj) &amp; vbCrLf &amp; &quot;Name: &quot; &amp; obj.Name\r\nEnd Function<\/pre>\n<p>Das Beispielformular der Host-Datenbank statten wir mit der folgenden Prozedur aus:<\/p>\n<pre>Private Sub cmdDatentypen_Click()\r\n    Dim strString As String\r\n    Dim intInteger As Integer\r\n    Dim db As DAO.Database\r\n    Set db = CurrentDb\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.Datentypen&quot;, strString, intInteger, db\r\nEnd Sub<\/pre>\n<p>Die Prozedur &uuml;bergibt je eine <b>String<\/b>-, <b>Integer<\/b>&#8211; und <b>Database<\/b>-Variable. Die aufgerufene Funktion gibt die gew&uuml;nschten Informationen aus.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Daten aus der Add-In-Datenbank nutzen<\/p>\n<p>Vielleicht gibt es einen Anwendungsfall, bei dem die Add-In-Datenbank bestimmte Daten bereithalten soll. Sie k&ouml;nnen dann in der Add-In-Funktion ein Recordset auf Basis der Daten erzeugen und dieses an die aufrufende Funktion zur&uuml;ckgeben.<\/p>\n<p>Die Add-In-Funktion sieht wie folgt aus:<\/p>\n<pre>Public Function RecordsetHolen() As DAO.Recordset\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set db = CodeDb\r\n    Set rst = db.OpenRecordset(&quot;tblOptionen&quot;, dbOpenDynaset)\r\n    Set RecordsetHolen = rst\r\nEnd Function<\/pre>\n<p>Sie hat den Datentyp <b>DAO.Recordset <\/b>und &ouml;ffnet schlicht und einfach ein Recordset auf Basis der Tabelle <b>tblOptionen <\/b>der Add-In-Datenbank. Woher aber wei&szlig; die Funktion, dass sie auf die Daten der Add-In-Datenbank zugreifen soll und nicht auf die der Host-Datenbank Ganz einfach: Sie verwenden die Funktion <b>CodeDB <\/b>statt <b>CurrentDB<\/b>, um einen Verweis auf das entsprechende <b>Database<\/b>-Objekt zu erhalten.<\/p>\n<p>Im Formular <b>frmBeispiele <\/b>der Host-Datenbank bringen wir eine Schaltfl&auml;che namens <b>cmdRecordset <\/b>unter, die beim Klicken die folgende Prozedur ausl&ouml;st:<\/p>\n<pre>Private Sub cmdRecordset_Click()\r\n    Dim rst As DAO.Recordset\r\n    Set rst = Application.Run(\r\n    CurrentProject.Path &amp; &quot;\\Ziel.RecordsetHolen&quot;)\r\n    Do While Not rst.EOF\r\n        Debug.Print rst.Fields(0), rst.Fields(1), rst.Fields(2)\r\n        rst.MoveNext\r\n    Loop\r\n    RunCommand acCmdDebugWindow\r\nEnd Sub<\/pre>\n<p>Die Prozedur ruft die Funktion <b>RecordsetHolen <\/b>in der Add-In-Datenbank auf und nimmt als R&uuml;ckgabewert den Verweis auf das <b>Recordset<\/b>-Objekt entgegen. Um zu zeigen, dass dieses nun verf&uuml;gbar ist, werden die einzelnen Datens&auml;tze im Direktbereich ausgegeben, der mit <b>RunCommand.DebugWindow <\/b>eingeblendet wird.<\/p>\n<p><b>Formular &ouml;ffnen<\/b><\/p>\n<p>Wenn Sie ein Formular in der Add-In-Anwendung &ouml;ffnen m&ouml;chten, f&uuml;gen Sie der Anwendung folgende Funktion hinzu, wobei das Formular <b>frmEinfach <\/b>in der Add-In-Anwendung enthalten sein muss:<\/p>\n<pre>Public Function EinfachesFormularOeffnen()\r\n    DoCmd.OpenForm &quot;frmEinfach&quot;, WindowMode:=acDialog\r\nEnd Function<\/pre>\n<p>In der Host-Anwendung rufen Sie diese Funktion einfach mit <b>Run <\/b>auf:<\/p>\n<pre>Private Sub cmdFormularOeffnen_Click()\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.EinfachesFormularOeffnen&quot;\r\nEnd Sub<\/pre>\n<p>Das Formular wird ohne Verz&ouml;gerung ge&ouml;ffnet.<\/p>\n<p><b>Formular mit &Ouml;ffnungsargument<\/b><\/p>\n<p>Wenn Sie ein Formular in der Add-In-Datenbank &ouml;ffnen und diesem ein &Ouml;ffnungsargument aus der Host-Anwendung &uuml;bergeben m&ouml;chten, erledigen Sie dies in zwei Schritten. Im ersten Schritt rufen Sie die Add-In-Funktion auf und &uuml;bergeben den als &Ouml;ffnungsargument vorgesehenen Wert &#8211; hier beispielsweise ein <b>String<\/b>-Wert:<\/p>\n<pre>Private Sub cmdFormularOpenArgs_Click()\r\n    Application.Run CurrentProject.Path &amp; &quot;\\Ziel.FormularMitOpenArgsOeffnen&quot;, &quot;&Ouml;ffnungsargument&quot;\r\nEnd Sub<\/pre>\n<p>Die Add-In-Funktion nimmt diesen Wert als Parameter entgegen und tr&auml;gt ihn als Wert des Parameters <b>OpenArgs <\/b>beim Aufruf des Formulars in die <b>OpenForm<\/b>-Methode ein:<\/p>\n<pre>Public Function FormularMitOpenArgsOeffnen(_\r\n    strOpenargs As String)\r\n    DoCmd.OpenForm &quot;frmOeffnungsargument&quot;, WindowMode:=acDialog, OpenArgs:=strOpenargs\r\nEnd Function<\/pre>\n<p>Im Formular der Add-In-Datenbank, hier <b>frmOeffnungsargument<\/b>, wird das &uuml;ber die Eigenschaft <b>OpenArgs <\/b>abrufbare &Ouml;ffnungsargument beim Laden ausgewertet und beispielsweise in ein Textfeld eingetragen:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me!txtOeffnungsargument = Nz(Me.OpenArgs)\r\nEnd Sub<\/pre>\n<p>Das Ergebnis sehen Sie in Bild 5.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Ein per OpenArgs &uuml;bergebener Wert im Textfeld des Add-In-Formulars<\/span><\/b><\/p>\n<p><b>Formular mit R&uuml;ckgabewert<\/b><\/p>\n<p>Wenn Sie eine Funktion zu einer Add-In-Anwendung hinzuf&uuml;gen, die ein Formular &ouml;ffnet, damit der Benutzer dort bestimmte Eingaben t&auml;tigen kann und anschlie&szlig;end ein entsprechendes Ergebnis erh&auml;lt, wollen Sie das Ergebnis auch zur aufrufenden Host-Anwendung zur&uuml;ck&uuml;bertragen.<\/p>\n<p>Das folgende Beispiel zeigt die dazu notwendigen Schritte. Den Start machen wir wieder in der Host-Anwendung. Dort l&ouml;st die Schaltfl&auml;che <b>cmdFormularRueckgabewert<\/b> die folgende Prozedur aus. Diese deklariert eine Variable namens <b>strRueckgabewert<\/b> und weist dieser das Ergebnis des Aufrufs der Funktion <b>FormularMitRueckgabewert <\/b>der Add-In-Datenbank zu. Zur Pr&uuml;fung wird das Ergebnis per Meldungsfenster ausgegeben:<\/p>\n<pre>Private Sub cmdFormularRueckgabewert_Click()\r\n    Dim strRueckgabewert As String\r\n    strRueckgabewert = Application.Run(CurrentProject.Path &amp; &quot;\\Ziel.FormularMitRueckgabewert&quot;)\r\n    MsgBox &quot;Rueckgabewert: &quot; &amp; strRueckgabewert\r\nEnd Sub<\/pre>\n<p>Die Funktion <b>FormularMitRueckgabewert <\/b>&ouml;ffnet das Formular als modalen Dialog. Das bedeutet, dass der aufrufende Code erst weiterl&auml;uft, wenn der Benutzer das Formular geschlossen oder ausgeblendet hat.<\/p>\n<p>Ist dies geschehen, indem der Benutzer die <b>OK<\/b>-Schaltfl&auml;che gedr&uuml;ckt und das Formular ausgeblendet hat, liest die Prozedur den Wert des Textfeldes <b>txtRueckgabewert <\/b>ein und weist diesem den R&uuml;ckgabewert der Funktion <b>FormularMitRueckgabewert <\/b>zu. Anschlie&szlig;end wird das Formular endg&uuml;ltig geschlossen:<\/p>\n<pre>Public Function FormularMitRueckgabewert() As String\r\n    DoCmd.OpenForm &quot;frmRueckgabewert&quot;, WindowMode:=acDialog\r\n    FormularMitRueckgabewert = Nz(Forms!frmRueckgabewert!txtRueckgabewert, &quot;&quot;)\r\n    DoCmd.Close acForm, &quot;frmRueckgabewert&quot;\r\nEnd Function<\/pre>\n<p>Das Formular <b>frmRueckgabewert <\/b>enth&auml;lt eine Schaltfl&auml;che namens <b>cmdOK<\/b>, die auf Mausklick das Formular ausblendet:<\/p>\n<pre>Private Sub cmdOK_Click()\r\n    Me.Visible = False\r\nEnd Sub<\/pre>\n<p>Die Eingabe des Textes erfolgt schlie&szlig;lich wie in Bild 7 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Eingabe des R&uuml;ckgabewertes in ein Formular der Add-In-Datenbank &#8230;<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2013_03\/FunktionenAusanderenDatenbanken-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: &#8230; und Ausgabe des ermittelten Textfeld-Inhalts<\/span><\/b><\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag zeigt alle Techniken, die f&uuml;r die Interaktion zwischen einer Host- und einer Add-In-Anwendung n&ouml;tig sind.<\/p>\n<p>Damit k&ouml;nnen Sie umfangreiche Funktionen, die Sie in mehreren Anwendungen einsetzen, in eine eigene Anwendung exportieren und von der Host-Datenbank aus aufrufen.<\/p>\n<p>Vor der Weitergabe an Kunden\/Benutzer f&uuml;gen Sie die Funktion entweder wieder ein oder liefern das Add-In mit.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Start.mdb<\/p>\n<p>Ziel.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{F02BF949-CA00-47C0-935E-D3478EE81313}\/aiu_886.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manche Funktionen ben&ouml;tigen Sie nicht nur in einer, sondern in mehreren Datenbanken. Sie k&ouml;nnen die Funktion dann in die jeweiligen Datenbanken kopieren und dort nutzen. Dies bringt allerdings einigen Mehraufwand bei der Pflege der Funktion mit sich: Wenn Sie etwa einen Fehler beheben, m&uuml;ssen Sie dies gleich f&uuml;r mehrere Datenbanken erledigen. Beim zentralen Speichern der Funktion in einer einzigen Datenbankdatei brauchen Sie &Auml;nderungen nur an einer einzigen Stelle durchzuf&uuml;hren. Und es gibt noch weitere Vorteile und Anwendungszwecke &#8211; mehr dazu im vorliegenden Beitrag.<\/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":[662013,66032013,44000025],"tags":[],"class_list":["post-55000886","post","type-post","status-publish","format-standard","hentry","category-662013","category-66032013","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>Funktionen aus anderen Datenbanken - 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\/Funktionen_aus_anderen_Datenbanken\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Funktionen aus anderen Datenbanken\" \/>\n<meta property=\"og:description\" content=\"Manche Funktionen ben&ouml;tigen Sie nicht nur in einer, sondern in mehreren Datenbanken. Sie k&ouml;nnen die Funktion dann in die jeweiligen Datenbanken kopieren und dort nutzen. Dies bringt allerdings einigen Mehraufwand bei der Pflege der Funktion mit sich: Wenn Sie etwa einen Fehler beheben, m&uuml;ssen Sie dies gleich f&uuml;r mehrere Datenbanken erledigen. Beim zentralen Speichern der Funktion in einer einzigen Datenbankdatei brauchen Sie &Auml;nderungen nur an einer einzigen Stelle durchzuf&uuml;hren. Und es gibt noch weitere Vorteile und Anwendungszwecke - mehr dazu im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:35:52+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca\" \/>\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\\\/Funktionen_aus_anderen_Datenbanken\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Funktionen aus anderen Datenbanken\",\"datePublished\":\"2020-05-22T21:35:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/\"},\"wordCount\":2576,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6ac92c14d1824f4496ff19bf2c081dca\",\"articleSection\":[\"2013\",\"3\\\/2013\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/\",\"name\":\"Funktionen aus anderen Datenbanken - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6ac92c14d1824f4496ff19bf2c081dca\",\"datePublished\":\"2020-05-22T21:35:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6ac92c14d1824f4496ff19bf2c081dca\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6ac92c14d1824f4496ff19bf2c081dca\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Funktionen_aus_anderen_Datenbanken\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Funktionen aus anderen Datenbanken\"}]},{\"@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":"Funktionen aus anderen Datenbanken - 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\/Funktionen_aus_anderen_Datenbanken\/","og_locale":"de_DE","og_type":"article","og_title":"Funktionen aus anderen Datenbanken","og_description":"Manche Funktionen ben&ouml;tigen Sie nicht nur in einer, sondern in mehreren Datenbanken. Sie k&ouml;nnen die Funktion dann in die jeweiligen Datenbanken kopieren und dort nutzen. Dies bringt allerdings einigen Mehraufwand bei der Pflege der Funktion mit sich: Wenn Sie etwa einen Fehler beheben, m&uuml;ssen Sie dies gleich f&uuml;r mehrere Datenbanken erledigen. Beim zentralen Speichern der Funktion in einer einzigen Datenbankdatei brauchen Sie &Auml;nderungen nur an einer einzigen Stelle durchzuf&uuml;hren. Und es gibt noch weitere Vorteile und Anwendungszwecke - mehr dazu im vorliegenden Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:35:52+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca","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\/Funktionen_aus_anderen_Datenbanken\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Funktionen aus anderen Datenbanken","datePublished":"2020-05-22T21:35:52+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/"},"wordCount":2576,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca","articleSection":["2013","3\/2013","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/","url":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/","name":"Funktionen aus anderen Datenbanken - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca","datePublished":"2020-05-22T21:35:52+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/6ac92c14d1824f4496ff19bf2c081dca"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Funktionen_aus_anderen_Datenbanken\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Funktionen aus anderen Datenbanken"}]},{"@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\/55000886","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=55000886"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000886\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}