{"id":55000827,"date":"2012-04-01T00:00:00","date_gmt":"2020-05-22T21:53:42","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=827"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"AddInBackend_bereitstellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/","title":{"rendered":"Add-In-Backend bereitstellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Mit Access-Add-Ins lassen sich eine Menge Funktionen f&uuml;r Access nachr&uuml;sten. Einige Anwendungen produzieren dabei sogar Daten, die im Add-In gespeichert und sp&auml;ter wieder bereitgestellt werden. Eigentlich kein Problem &#8211; Sie k&ouml;nnen von einem Add-In aus sowohl auf die Tabellen der Host-Datenbank zugreifen als auch auf die Tabellen in der Add-In-Datenbank selbst. Aber was ist, wenn Sie eine neue Version des Add-Ins liefern, der Benutzer jedoch die bereits damit erstellten Daten weiter nutzen m&ouml;chte Die L&ouml;sung ist ein Backend. Die Installation eines Add-Ins plus Backend-Datenbank ist jedoch komplizierter als ohne. Wie dies einfach gelingt, zeigt dieser Beitrag.<\/b><\/p>\n<p>Access-Add-Ins lassen sich vergleichbar einfach installieren: Sie bringen die <b>.mda<\/b>&#8211; oder <b>.accda<\/b>-Datei zun&auml;chst irgendwo auf der lokalen Festplatte unter. Dann &ouml;ffnen Sie Access, starten den Add-In-Manager (unter Access 2003 und &auml;lter mit dem Men&uuml;befehl <b>Extras|Add-Ins|Add-In-Manager<\/b> oder unter Access 2007 und j&uuml;nger mit dem Ribbon-Eintrag <b>Datenbank-Tools|Add-Ins|Add-In-Manager<\/b>) und w&auml;hlen dort den Befehl <b>Neues hinzuf&uuml;gen <\/b>(kann je nach Version variieren) aus. Im folgenden Dialog w&auml;hlen Sie die <b>.mda<\/b>&#8211; oder <b>.accda<\/b>-Datei aus und sorgen so daf&uuml;r, dass Access diese Datei in das Add-In-Verzeichnis des Systems speichert und einige Eintr&auml;ge in der Registry anlegt, die Access beim Start Informationen &uuml;ber das neue Add-In liefern.<\/p>\n<p>Nun tritt der bereits in der Einleitung erw&auml;hnte Fall ein, dass ein Add-In nicht nur aus der eigentlichen Add-In-Datenbank besteht, sondern zus&auml;tzlich noch aus einem Backend. Dieses k&ouml;nnen Sie zwar problemlos etwa in einer <b>.zip<\/b>-Bibliothek mitliefern, aber wie gelangt die Backend-Datei in das Add-In-Verzeichnis, damit das Add-In-Frontend dieses schnell und zuverl&auml;ssig etwa per Referenz &uuml;ber den aktuellen Datenbankordner (<b>CurrentProject.Path<\/b>) finden kann Da gibt es mehrere M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie teilen dem Benutzer gleich zu Beginn mit, dass er Frontend und Backend direkt in das Add-In-Verzeichnis von Access kopiert und die dortige Version des Frontends mit dem Add-In-Manager installiert. Nachteil: Je nach Betriebssystem-Version und Benutzer variiert der Pfad zum Add-In-Verzeichnis und der Benutzer muss erst suchen.<\/li>\n<li class=\"aufz-hlung\">Sie lassen den Benutzer die beiden Dateien an beliebiger Stelle speichern, installieren das Add-In mit dem Add-In-Manager und fordern den Benutzer beim ersten Start des Add-Ins unter Angabe des Add-In-Verzeichnisses (das sich ja beim Start des Add-Ins mit <b>Codeproject.Path <\/b>ermitteln l&auml;sst) auf, die Backend-Datenbank ins Add-In-Verzeichnis zu kopieren. Ist vielleicht etwas benutzerfreundlicher als die erste Variante, aber nicht optimal.<\/li>\n<li class=\"aufz-hlung\">Sie lassen den Add-In-Manager komplett aus dem Spiel und erstellen mit einem Setup-Tool Ihrer Wahl ein einfaches Setup, dass beide Dateien in das Add-In-Verzeichnis kopiert und die ben&ouml;tigten Registry-Eintr&auml;ge vornimmt. Auch hier muss man allerdings erst das Add-In-Verzeichnis programmatisch ermitteln beziehungsweise durch den Benutzer ausw&auml;hlen lassen.<\/li>\n<li class=\"aufz-hlung\">Letzte Variante, die in diesem Beitrag vorgestellt wird: Sie geben einfach nur eine Add-In-Datenbank weiter und speichern in einer Tabelle dieser Datenbank die Backend-Datei. Das Add-In kann dann ohne Kenntnis des Add-In-Verzeichnisses und weiteres Zutun des Benutzers &uuml;ber den Add-In-Manager installiert werden. Beim Starten pr&uuml;ft das Add-In dann, ob die Backend-Datenbank bereits im gleichen Verzeichnis, also im Add-In-Verzeichnis, liegt. Ist dies nicht der Fall, wird das Backend aus der Tabelle in das Add-In-Verzeichnis kopiert. Danach werden die Tabellen verkn&uuml;pft und das Add-In kann seine Arbeit aufnehmen.<\/li>\n<\/ul>\n<p><b>Speichern eines Backends in einer Add-In-Datenbank<\/b><\/p>\n<p>Das Backend soll in einem OLE-Feld einer Tabelle der Add-In-Datenbank gespeichert werden. Dazu legen Sie zun&auml;chst eine Tabelle an, die nur ein Prim&auml;rschl&uuml;sselfeld und ein Feld namens <b>Backend <\/b>mit dem Datentyp <b>OLE-Objekt <\/b>enth&auml;lt (s. Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/AddInBackends-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Tabelle zum Speichern des Backends<\/span><\/b><\/p>\n<p>Nun ben&ouml;tigen Sie zun&auml;chst eine Funktion, die eine beliebige Backend-Datenbank in das OLE-Feld der Tabelle <b>tblBackend <\/b>schreibt. Diese Funktion finden Sie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-49-anchor\">Listing 1<\/a><\/span>. Die Funktion erwartet als einzigen Parameter den Namen der Backend-Datenbank. Der Aufruf dieser Prozedur k&ouml;nnte also beispielsweise wie folgt aussehen:<\/p>\n<pre>Public Sub BackendSpeichern()\r\n    If SaveBackendToOLEField(CurrentProject.Path &amp; &quot;\\Addin_BE.mda&quot;) = True Then\r\n        MsgBox &quot;Backend erfolgreich gespeichert.&quot;\r\n    Else\r\n        MsgBox &quot;Backend wurde nicht hinzugef&uuml;gt.&quot;\r\n    End If\r\nEnd Sub<\/pre>\n<\/p>\n<p class=\"listingueberschrift\">Listing 1: Einf&uuml;gen der Backend-Datenbank in das OLE-Feld der Tabelle tblBackend<\/p>\n<pre>Public Function SaveBackendToOLEField(strFilename As String) As Long\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim lngFileID As Long\r\n    Dim Buffer() As Byte\r\n    Dim lngFileLen As Long\r\n    Dim strSQL As String\r\n    On Error GoTo SaveBackendToOLEField_Err\r\n    Set db = CurrentDb\r\n    db.Execute &quot;DELETE FROM tblBackend&quot;, dbFailOnError\r\n    strSQL = &quot;SELECT Backend FROM tblBackend&quot;\r\n    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n    If Dir(strFilename) = &quot;&quot; Then\r\n        MsgBox &quot;Die Datei ''&quot; &amp; strFilename &amp; &quot;'' existiert nicht.&quot;\r\n        Exit Function\r\n    End If\r\n    rst.AddNew\r\n    lngFileID = FreeFile\r\n    Open strFilename For Binary Access Read Lock Read Write As lngFileID\r\n    lngFileLen = LOF(lngFileID)\r\n    ReDim Buffer(lngFileLen)\r\n    rst!Backend = Null\r\n    Get lngFileID, , Buffer\r\n    rst!Backend.AppendChunk Buffer\r\n    rst.Update\r\n    SaveBackendToOLEField = True\r\n    SaveBackendToOLEField_Exit:\r\n    On Error Resume Next\r\n    Close lngFileID\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\n    Exit Function\r\nSaveBackendToOLEField_Err:\r\n    SaveBackendToOLEField = Err.Number\r\n    Resume SaveBackendToOLEField_Exit\r\nEnd Function<\/pre>\n<p><!--30percent--><\/p>\n<p>Die Funktion selbst &ouml;ffnet die Datenbankdatei f&uuml;r den bin&auml;ren Zugriff und schreibt ihren Inhalt in das Feld <b>Backend<\/b> der Tabelle <b>tblBackend<\/b>. Ein eventuell bestehender Datensatz wird zuvor gel&ouml;scht, anschlie&szlig;end &ouml;ffnet die Funktion eine neue Datensatzgruppe auf Basis der Tabelle <b>tblBackend<\/b>. Vor dem Anlegen eines neuen Datensatzes erfolgt noch die Pr&uuml;fung, ob die angegebene Datenbankdatei &uuml;berhaupt im Dateisystem vorliegt &#8211; falls nicht, wird die Prozedur beendet. In der Regel sollte diese Datei jedoch vorhanden sein, sodass im n&auml;chsten Schritt ein neuer Datensatz in der Tabelle <b>tblBackend <\/b>angelegt wird. Die Dateinummer f&uuml;r die Referenz auf die angegebene Datei wird in der Variablen <b>lngFileID <\/b>gespeichert, anschlie&szlig;end wird die Datei ge&ouml;ffnet. Die L&auml;nge beziehungsweise Gr&ouml;&szlig;e der Datei vermerkt die Funktion in der Variablen <b>lngFileLen<\/b>, mit der auch gleich ein entsprechendes Byte-Array als Zwischenspeicher vor dem Eintragen in der Tabelle dimensioniert wird. Die <b>Get<\/b>-Methode f&uuml;llt den Dateiinhalt in das Byte-Array <b>Buffer<\/b>, von wo aus die Datei mit der <b>AppendChunk<\/b>-Methode gleich in das Feld <b>Backend <\/b>der Tabelle <b>tblBackend <\/b>geschrieben wird. Danach sorgt die <b>Update<\/b>-Methode f&uuml;r das Speichern dieses Datensatzes. Enth&auml;lt das Feld <b>Backend <\/b>anschlie&szlig;end wie in Bild 2 den Wert <b>Long Binary Daten<\/b>, scheint alles funktioniert zu haben.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/AddInBackends-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Tabelle zum Speichern des Backends in der Datenblattansicht<\/span><\/b><\/p>\n<p><b>Backend exportieren<\/b><\/p>\n<p>Eine zweite Funktion soll die im Feld <b>Backend <\/b>der Tabelle <b>tblBackend <\/b>gespeicherte Datei wieder im Dateisystem speichern, und zwar unter dem mit dem Parameter <b>strFilename <\/b>angegebenen Dateinamen. Das Basisverzeichnis entspricht dem aktuellen Verzeichnis der Add-In-Datei, das hier mit <b>CodeProject.Path <\/b>ermittelt wird. Warum <b>CodeProject.Path <\/b>und nicht <b>CurrentProject.Path<\/b><\/p>\n<p>Ganz einfach: Weil diese Funktion sp&auml;ter von der Add-In-Datenbank aus aufgerufen werden soll, w&auml;hrend diese von der Host-Datenbank aus als Add-In ge&ouml;ffnet ist.<\/p>\n<p>Sind Host- und Add-In-Datenbank aktiv, referenzieren Sie mit <b>CurrentProject <\/b>die Host-Datenbank und mit <b>CodeProject <\/b>die Add-In-Datenbank. Wenn Sie hier <b>CurrentProject.Path <\/b>verwenden, w&uuml;rde das Backend des Add-Ins im Verzeichnis der Host-Datei gespeichert, von der aus das Add-In ge&ouml;ffnet wurde.<\/p>\n<p>Die Funktion <b>SaveOLEFieldToBackend<\/b> sieht wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-51-anchor\">Listing 2<\/a><\/span> aus und &ouml;ffnet zun&auml;chst ein Recordset auf Basis der Tabelle <b>tblBackend<\/b>. Die <b>LenB<\/b>-Funktion ermittelt die Gr&ouml;&szlig;e der im Feld <b>Backend <\/b>gespeicherten Datei.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Entpacken der Backend-Datenbank aus dem Tabellenfeld auf die Festplatte<\/p>\n<pre>Public Function SaveOLEFieldToBackend(strFilename As String) As Boolean\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim lngFileID As Long\r\n    Dim Buffer() As Byte\r\n    Dim lngFileLen As Long\r\n    On Error GoTo SaveOLEFieldToBackend_Err\r\n    Set db = CodeDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT Backend FROM tblBackend&quot;, dbOpenDynaset)\r\n    On Error GoTo SaveOLEFieldToBackend_Err\r\n    lngFileID = FreeFile\r\n    lngFileLen = Nz(LenB(rst!Backend), 0)\r\n    If lngFileLen &gt; 0 Then\r\n        ReDim Buffer(lngFileLen)\r\n        Open CodeProject.Path &amp; &quot;\\&quot; &amp; strFilename For Binary Access Write As lngFileID\r\n        Buffer = rst!Backend.GetChunk(0, lngFileLen)\r\n        Put lngFileID, , Buffer\r\n    End If\r\n    SaveOLEFieldToBackend = True\r\n    SaveOLEFieldToBackend_Exit:\r\n    On Error Resume Next\r\n    Close lngFileID\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\n    Exit Function\r\n    SaveOLEFieldToBackend_Err:\r\n    SaveOLEFieldToBackend = False\r\n    Resume SaveOLEFieldToBackend_Exit\r\nEnd Function<\/pre>\n<p>Sollte diese gr&ouml;&szlig;er als <b>0 <\/b>sein, wird das Byte-Array <b>Buffer <\/b>entsprechend dimensioniert und &uuml;ber die <b>GetChunk<\/b>-Methode des Feldes <b>Backend <\/b>mit dessen Inhalt gef&uuml;llt.<\/p>\n<p>Der Inhalt dieser Variablen wird dann mit der <b>Put<\/b>-Methode in die zuvor f&uuml;r den bin&auml;ren Zugriff ge&ouml;ffnete Datei geschrieben.<\/p>\n<p><b>Backend beim ersten Start des Add-Ins entpacken<\/b><\/p>\n<p>Die Add-In-Datenbank <b>AddInBackend.mda<\/b>, die wir mit den oben erw&auml;hnten Funktionen versehen haben, enth&auml;lt eine Tabelle namens <b>USysRegInfo<\/b>.<\/p>\n<p>Diese liefert die bei der Installation des Add-Ins &uuml;ber den Add-In-Manager ben&ouml;tigten Daten zum Eintragen in die Registry.<\/p>\n<p>F&uuml;r dieses Beispiel wollen wir ein Men&uuml;-Add-In erstellen, das Sie einfach &uuml;ber das gleiche Men&uuml; starten k&ouml;nnen, in dem Sie auch den Add-In-Manager finden. Die Tabelle sieht etwa wie in Bild 3 aus. Dort finden Sie im ersten Datensatz die Funktion, die beim Starten des Add-Ins aufgerufen werden soll &#8211; sie hei&szlig;t <b>Autostart<\/b>.<\/p>\n<pre>Public Function Autostart()\r\n    If Not Len(Dir(CodeProject.Path &amp; &quot;\\AddInBackend.mda&quot;)) = 0 Then\r\n        If Not SaveOLEFieldToBackend(&quot;AddInBackend.mda&quot;) Then\r\n            MsgBox &quot;Es konnte kein Backend f&uuml;r das Add-In gefunden werden.&quot;\r\n        End If\r\n    End If\r\n    TabellenVerknuepfen\r\nEnd Function<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2012_02\/AddInBackends-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Die Tabelle USysRegInfo mit den Daten f&uuml;r die Registry<\/span><\/b><\/p>\n<p>In dieser Funktion m&uuml;ssen wir die Logik unterbringen, die beim Starten des Add-Ins pr&uuml;ft, ob sich die Backend-Datenbank bereits im gleichen Verzeichnis wie das Add-In befindet. Ist dies nicht der Fall, soll das Backend aus der Tabelle <b>tblBackend <\/b>dorthin extrahiert werden. Au&szlig;erdem sollen die vorhandenen Tabellen des Backends mit dem Frontend verkn&uuml;pft werden.<\/p>\n<p>Der Start des Add-Ins &uuml;ber den entsprechenden Men&uuml;-\/Ribbon-Eintrag l&ouml;st nun die Funktion <b>Autostart <\/b>aus (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-53-anchor\">Listing 3<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 3: Entpacken des Backends und aktualisieren der vorhandenen Verkn&uuml;pfungen<\/p>\n<pre>Private Sub TabellenVerknuepfen()\r\n    Dim db As DAO.Database\r\n    Dim tdf As DAO.TableDef\r\n    Set db = CodeDb\r\n    For i = 0 To db.TableDefs.Count - 1\r\n        If Len(db.TableDefs(i).Connect) &gt; 0 Then\r\n            If Not Mid(db.TableDefs(i).Connect, 11) = CodeProject.Path &amp; &quot;\\AddInBackend.mda&quot; Then\r\n                db.TableDefs(i).Connect = &quot;;database=&quot; &amp; CodeProject.Path &amp; &quot;\\AddInBackend.mda&quot;\r\n                db.TableDefs(i).RefreshLink\r\n            End If\r\n        End If\r\n    Next i\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Diese pr&uuml;ft zun&auml;chst, ob die Backend-Datenbank bereits im gleichen Verzeichnis wie das Frontend des Add-Ins vorliegt. Falls nicht, wird die Prozedur zum Extrahieren des Add-In-Backends aufgerufen. Diese sollte in der Regel das Backend in das Add-In-Verzeichnis kopieren. Danach kann die Routine <b>TabelleVerknuepfen<\/b> aufgerufen werden, welche schlicht und einfach alle bestehenden Verkn&uuml;pfungen auf das neue Backend mappt. Das bedeutet, dass alle <b>TableDef<\/b>-Objekte der Tabelle durchlaufen werden, wobei die Prozedur <b>TabelleVerknuepfen <\/b>nur diejenigen innerhalb der Schleife weiterverarbeitet, deren Eigenschaft <b>Connect <\/b>nicht leer ist &#8211; dies deutet darauf hin, dass das <b>TableDef<\/b>-Objekt lediglich eine Verkn&uuml;pfung herstellt. Die Prozedur pr&uuml;ft dann, ob der Pfad der f&uuml;r die <b>Connect<\/b>-Eigenschaft angegebenen Backend-Datenbank mit dem Pfad der aktuellen Backend-Datenbank &uuml;bereinstimmt. Falls nicht, wird die Verkn&uuml;pfung auf Basis des aktuellen Backend-Pfads erneuert und aktualisiert. Nach dem ersten Start sollte jedoch keine neue Verkn&uuml;pfung mehr erforderlich sein.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AddinMitBackend.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{20F53033-1E8A-42F2-9E36-8FB2CB41EB54}\/aiu_827.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Access-Add-Ins lassen sich eine Menge Funktionen f&uuml;r Access nachr&uuml;sten. Einige Anwendungen produzieren dabei sogar Daten, die im Add-In gespeichert und sp&auml;ter wieder bereitgestellt werden. Eigentlich kein Problem &#8211; Sie k&ouml;nnen von einem Add-In aus sowohl auf die Tabellen der Host-Datenbank zugreifen als auch auf die Tabellen in der Add-In-Datenbank selbst. Aber was ist, wenn Sie eine neue Version des Add-Ins liefern, der Benutzer jedoch die bereits damit erstellten Daten weiter nutzen m&ouml;chte Die L&ouml;sung ist ein Backend. Die Installation eines Add-Ins plus Backend-Datenbank ist jedoch komplizierter als ohne. Wie dies einfach gelingt, zeigt dieser 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":[66022012,662012,44000027],"tags":[],"class_list":["post-55000827","post","type-post","status-publish","format-standard","hentry","category-66022012","category-662012","category-Loesungen"],"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>Add-In-Backend bereitstellen - 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\/AddInBackend_bereitstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Add-In-Backend bereitstellen\" \/>\n<meta property=\"og:description\" content=\"Mit Access-Add-Ins lassen sich eine Menge Funktionen f&uuml;r Access nachr&uuml;sten. Einige Anwendungen produzieren dabei sogar Daten, die im Add-In gespeichert und sp&auml;ter wieder bereitgestellt werden. Eigentlich kein Problem - Sie k&ouml;nnen von einem Add-In aus sowohl auf die Tabellen der Host-Datenbank zugreifen als auch auf die Tabellen in der Add-In-Datenbank selbst. Aber was ist, wenn Sie eine neue Version des Add-Ins liefern, der Benutzer jedoch die bereits damit erstellten Daten weiter nutzen m&ouml;chte Die L&ouml;sung ist ein Backend. Die Installation eines Add-Ins plus Backend-Datenbank ist jedoch komplizierter als ohne. Wie dies einfach gelingt, zeigt dieser Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:53:42+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733\" \/>\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=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Add-In-Backend bereitstellen\",\"datePublished\":\"2020-05-22T21:53:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/\"},\"wordCount\":1513,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6c2e90ef00d24c219ee676693a4ad733\",\"articleSection\":[\"2\\\/2012\",\"2012\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/\",\"name\":\"Add-In-Backend bereitstellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6c2e90ef00d24c219ee676693a4ad733\",\"datePublished\":\"2020-05-22T21:53:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6c2e90ef00d24c219ee676693a4ad733\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/6c2e90ef00d24c219ee676693a4ad733\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AddInBackend_bereitstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add-In-Backend bereitstellen\"}]},{\"@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":"Add-In-Backend bereitstellen - 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\/AddInBackend_bereitstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Add-In-Backend bereitstellen","og_description":"Mit Access-Add-Ins lassen sich eine Menge Funktionen f&uuml;r Access nachr&uuml;sten. Einige Anwendungen produzieren dabei sogar Daten, die im Add-In gespeichert und sp&auml;ter wieder bereitgestellt werden. Eigentlich kein Problem - Sie k&ouml;nnen von einem Add-In aus sowohl auf die Tabellen der Host-Datenbank zugreifen als auch auf die Tabellen in der Add-In-Datenbank selbst. Aber was ist, wenn Sie eine neue Version des Add-Ins liefern, der Benutzer jedoch die bereits damit erstellten Daten weiter nutzen m&ouml;chte Die L&ouml;sung ist ein Backend. Die Installation eines Add-Ins plus Backend-Datenbank ist jedoch komplizierter als ohne. Wie dies einfach gelingt, zeigt dieser Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:53:42+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Add-In-Backend bereitstellen","datePublished":"2020-05-22T21:53:42+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/"},"wordCount":1513,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733","articleSection":["2\/2012","2012","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/","url":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/","name":"Add-In-Backend bereitstellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733","datePublished":"2020-05-22T21:53:42+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/6c2e90ef00d24c219ee676693a4ad733"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/AddInBackend_bereitstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Add-In-Backend bereitstellen"}]},{"@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\/55000827","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=55000827"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000827\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}