{"id":55000804,"date":"2011-12-01T00:00:00","date_gmt":"2020-05-22T21:58:52","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=804"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Tabellen_und_Beziehungen_kopieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/","title":{"rendered":"Tabellen und Beziehungen kopieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>W&auml;hrend Sie eine Datenbank programmieren, f&auml;llt unter Umst&auml;nden eine ganze Menge Datenm&uuml;ll an &#8211; Datens&auml;tze, die beim Test eingegeben werden und die Sie nicht mehr ben&ouml;tigen. Daf&uuml;r w&auml;re ein Satz realistischer Daten nicht schlecht. Dieser Beitrag zeigt, wie Sie das komplette Datenmodell einer Datenbank in einer zweiten Datenbank vorhalten und diese per Mausklick &uuml;ber die Tabellen der aktuell bearbeiteten Datenbank schreiben &#8211; und zwar inklusive Beziehungen.<\/b><\/p>\n<p>Wenn Sie Anwendungen programmieren und dabei zu Testzwecken immer wieder neue Beispieldaten in die Formulare eingeben oder auch Daten aus anderen Quellen wie XML-Dokumenten, Excel-Tabellen oder auch aus anderen Datenbanken in die Tabellen sp&uuml;len, m&ouml;chten Sie sicher gelegentlich den Urzustand wiederherstellen. Kein Problem: Sie m&uuml;ssen den Urzustand nur zum gew&uuml;nschten Zeitpunkt in eine externe Tabelle schreiben und diesen bei Bedarf wieder herstellen. Nat&uuml;rlich sollten dabei keine zwischenzeitlichen &auml;nderungen am Datenmodell &uuml;bersehen werden.<\/p>\n<p>Dieser Beitrag beschreibt eine L&ouml;sung, mit der Sie festgelegte Tabellen einer Datenbank und deren Beziehungen in eine externe Datenbank kopieren und wiederherstellen k&ouml;nnen. Die Benutzeroberfl&auml;che dieser L&ouml;sung besteht aus dem Formular <b>frmTabellenImportExport<\/b> (s. Bild 1). Dieses Formular zeigt beim &Ouml;ffnen alle Tabellen der aktuellen Datenbank an. Sie k&ouml;nnen nun durch Markieren der gew&uuml;nschten Tabellen festlegen, welche Eintr&auml;ge in der Sicherungsdatenbank landen sollen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/TabellenUndBeziehungenKopieren-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Das Formular zum Festlegen der zu importierenden oder zu exportierenden Tabellen<\/span><\/b><\/p>\n<p>Mit einem Klick auf die Schaltfl&auml;che <b>Sichern <\/b>&ouml;ffnen Sie einen <b>Datei &ouml;ffnen<\/b>-Dialog zum Ausw&auml;hlen der Zieldatei. Wenn Sie eine neue Sicherungsdatei erstellen m&ouml;chten, markieren Sie zuvor die Option <b>Neue Datenbank<\/b>. In diesem Fall w&auml;hlen Sie im <b>Datei speichern<\/b>-Dialog Pfad und Name der zu erstellenden Datenbankdatei aus. Wenn Sie die Daten einmal gesichert haben, k&ouml;nnen Sie diese &uuml;ber die Schaltfl&auml;che <b>Wiederherstellen <\/b>wieder in die aktuell ge&ouml;ffnete Datenbank importieren.<\/p>\n<p>Beachten Sie bitte, dass beim Exportieren wie auch beim Importieren alle Tabellen der Zieldatenbank und deren Beziehungen gel&ouml;scht werden.<\/p>\n<p><b>Funktion der L&ouml;sung<\/b><\/p>\n<p>Das Formular <b>frmTabellenImportExport <\/b>zeigt im Listenfeld <b>lstTabellen <\/b>alle Tabellen der aktuellen Datenbank an, deren Name nicht mit <b>USys&#8230;<\/b>, <b>MSys&#8230; <\/b>oder <b>~&#8230; <\/b>beginnt. Diese Tabellennamen werden beim ersten &Ouml;ffnen des Formulars in der Tabelle <b>tblTabellenExportImport <\/b>gespeichert, und zwar in der Prozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-anchor\">Listing 1<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 1: Diese Prozedur wird beim Laden des Formulars frmTabellenImportExport ausgel&ouml;st.<\/p>\n<pre>Private Sub Form_Load()\r\n    Dim db As DAO.Database\r\n    Dim tdf As DAO.TableDef\r\n    Dim rst As DAO.Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;tblTabellenExportImport&quot;, dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        Set tdf = Nothing\r\n        On Error Resume Next\r\n        Set tdf = db.TableDefs(rst!Tabelle)\r\n        On Error GoTo 0\r\n        If tdf Is Nothing Then\r\n            db.Execute &quot;DELETE FROM tblTabellenExportImport WHERE Tabelle = ''&quot; _\r\n                &amp; rst!Tabelle &amp; &quot;''&quot;, dbFailOnError\r\n        End If\r\n        rst.MoveNext\r\n    Loop\r\n    rst.Close\r\n    For Each tdf In db.TableDefs\r\n        Select Case Left(tdf.Name, 4)\r\n        Case &quot;MSys&quot;, &quot;USys&quot;, &quot;~***&quot;\r\n        Case Else\r\n        On Error Resume Next\r\n        db.Execute &quot;INSERT INTO tblTabellenExportImport(Tabelle) VALUES(''&quot; &amp; tdf.Name &amp; &quot;'')&quot;, dbFailOnError\r\n        End Select\r\n    Next tdf\r\n    Me!lstTabellen.Requery\r\n    Set rst = db.OpenRecordset(&quot;tblTabellenExportImport&quot;, dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        If rst!Export Then\r\n            Me!lstTabellen.Selected(rst.AbsolutePosition) = True\r\n        End If\r\n        rst.MoveNext\r\n    Loop\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Set db = Nothing\r\n    End Sub<\/pre>\n<p>Diese Prozedur pr&uuml;ft bei jedem Aufruf des Formulars, ob die in der Tabelle <b>tblTabellenImportExport <\/b>gespeicherten Tabellennamen noch mit den tats&auml;chlich in der Tabelle vorhandenen Tabellen &uuml;bereinstimmen, und gleicht diese gegebenenfalls ab.<\/p>\n<p>Dies geschieht in zwei Stufen: Als erstes durchl&auml;uft die Prozedur alle Datens&auml;tze der Tabelle <b>tblTabellenExportImport<\/b>, die wie in Bild 2 aussieht. Sie pr&uuml;ft f&uuml;r jeden Eintrag, ob es noch ein <b>TableDef<\/b>-Objekt mit dem entsprechenden Namen gibt. Falls nicht, deutet dies darauf hin, dass die Tabelle gel&ouml;scht wurde. In diesem Fall wird auch der entsprechende Eintrag aus der Tabelle <b>tblTabellenExportImport <\/b>entfernt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/TabellenUndBeziehungenKopieren-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Diese Tabelle speichert, welche Tabellen importiert und exportiert werden sollen.<\/span><\/b><\/p>\n<p>Danach folgt der umgekehrte Weg: Die Prozedur durchl&auml;uft in einer <b>For Each<\/b>-Schleife alle <b>TableDef<\/b>-Objekte der aktuellen Datenbank und versucht, f&uuml;r jede Tabelle einen Eintrag in der Tabelle <b>tblTabellenExportImport <\/b>anzulegen.<\/p>\n<p>Da die Tabelle einen eindeutigen Index f&uuml;r das Feld <b>Tabelle <\/b>enth&auml;lt, schl&auml;gt dies bei bereits vorhandenen Tabellennamen fehl. Dies ist jedoch kein Problem, da die Access-eigene Fehlerbehandlung zuvor ausgeschaltet wurde.<\/p>\n<p>Schlie&szlig;lich speichert die Tabelle im <b>Ja\/Nein<\/b>-Feld <b>Export<\/b>, ob eine Tabelle beim Exportieren oder Importieren ber&uuml;cksichtigt werden soll. Dies soll sich auch im Listenfeld <b>lstTabellen <\/b>widerspiegeln, das f&uuml;r die Mehrfachauswahl vorbereitet wurde.<\/p>\n<p>Dazu werden erneut alle Datens&auml;tze der Tabelle <b>tblTabellenExportImport <\/b>durchlaufen. Dabei stellt die Routine f&uuml;r alle Datens&auml;tze, die im Feld <b>Export <\/b>den Wert <b>True <\/b>enthalten, den Wert <b>Selected <\/b>des jeweiligen Eintrags im Listenfeld auf den Wert <b>True <\/b>ein.<\/p>\n<p>Zwar erlaubt das Listenfeld keinen direkten Zugriff auf die Eintr&auml;ge &uuml;ber den Prim&auml;rschl&uuml;sselwert, aber das ist nicht schlimm: Da das Listenfeld alle Datens&auml;tze der Tabelle <b>tblTabellenExportImport <\/b>anzeigt, entspricht die absolute Position des Datensatzzeigers dem Index der Eintr&auml;ge im Listenfeld.<\/p>\n<p><b>Tabellen aus- und abw&auml;hlen<\/b><\/p>\n<p>Wenn der Benutzer auf einen der Eintr&auml;ge des Listenfeldes <b>lstTabellen <\/b>klickt, soll der neue Zustand direkt in der Tabelle <b>tblTabellenExportImport <\/b>gespeichert werden. Dies erledigt eine Prozedur, die durch das Ereignis <b>Nach Aktualisierung <\/b>des Listenfeldes ausgel&ouml;st wird. Leider gibt es bei der Mehrfachauswahl im Listenfeld keine M&ouml;glichkeit, direkt den zuletzt angeklickten Wert zu ermitteln. Also machen wir aus der Not eine Tugend und schreiben gleich jeweils alle Zust&auml;nde in die Tabelle <b>tblTabellenExportImport<\/b>. Dies erledigt die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-29-anchor\">Listing 2<\/a><\/span>.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Aktualisieren der Tabellenwerte nach dem Ausw&auml;hlen von Listenfeldeintr&auml;gen<\/p>\n<pre>Private Sub lstTabellen_AfterUpdate()\r\n    Dim db As DAO.Database\r\n    Dim i As Integer\r\n    Dim intSelected As Integer\r\n    Set db = CurrentDb\r\n    For i = 0 To Me!lstTabellen.ListCount - 1\r\n        intSelected = Me!lstTabellen.Selected(i)\r\n        db.Execute &quot;UPDATE tblTabellenExportImport SET Export = &quot; &amp; intSelected _\r\n            &amp; &quot; WHERE TabelleID = &quot; &amp; Me!lstTabellen.ItemData(i)\r\n    Next i\r\n    End Sub<\/pre>\n<p><!--30percent--><\/p>\n<p><b>Exportieren der Tabellen<\/b><\/p>\n<p>Bevor Sie Tabellen wiederherstellen k&ouml;nnen, m&uuml;ssen Sie diese zun&auml;chst erstmalig exportieren. Dies erledigen Sie mit einem Klick auf die Schaltfl&auml;che <b>cmdSichern<\/b>. Die dadurch ausgel&ouml;ste Prozedur (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-30-anchor\">Listing 3<\/a><\/span>) pr&uuml;ft zun&auml;chst, ob das Kontrollk&auml;stchen <b>chkNeueDatenbank <\/b>aktiviert ist. Falls ja, &ouml;ffnet sie einen <b>Datei speichern<\/b>-Dialog, mit dem der Benutzer angeben kann, wie die zu erstellende Datei hei&szlig;en und wo sie gespeichert werden soll. Die Datenbankdatei wird gleich im folgenden Schritt angelegt, und zwar mit der <b>CreateDatabase<\/b>-Methode des <b>Workspace<\/b>-Objekts.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Starten des Sicherungsvorgangs<\/p>\n<pre>Private Sub cmdSichern_Click()\r\n    Dim strPfad As String\r\n    If Me!chkNeueDatenbank Then\r\n        strPfad = mdlImportExport.GetSaveFile(CurrentProject.Path)\r\n        DBEngine(0).CreateDatabase strPfad, dbLangGeneral\r\n    Else\r\n        strPfad = OPENFILENAME(CurrentProject.Path)\r\n    End If\r\n    If Len(Dir(strPfad)) &gt; 0 Then\r\n        MoveTablesAndRelations CurrentDb.Name, strPfad\r\n    End If\r\n    End Sub<\/pre>\n<p>Falls die Tabellen in eine bereits bestehende Datenbank &uuml;bertragen werden sollen, ruft die Prozedur einfach nur einen <b>Datei ausw&auml;hlen<\/b>-Dialog auf. In beiden F&auml;llen landet ein Dateipfad in der Variablen <b>strPfad<\/b>, der nun weiterverarbeitet werden kann. Dieser Pfad entspricht n&auml;mlich der Zieldatenbank des Exports.<\/p>\n<p>Enth&auml;lt <b>strPfad <\/b>eine vorhandene Datei, wird die Funktion <b>MoveTablesAndRelations <\/b>mit den Namen der aktuellen Datenbank und der Zieldatenbank aufgerufen. Bevor wir uns diese ansehen, werfen wir noch einen Blick auf die Prozedur, die durch einen Klick auf die Schaltfl&auml;che <b>cmdWiederherstellen <\/b>ausgel&ouml;st wird. Diese fragt direkt den Namen der Quelldatei der Sicherungsdatenbank ab und pr&uuml;ft diesen auf G&uuml;ltigkeit.<\/p>\n<p>Hat alles funktioniert, ruft auch diese Prozedur die Funktion <b>MoveTablesAndRelations <\/b>auf &#8211; mit den gleichen Parametern, nur in umgekehrter Reihenfolge. Zuerst wird also der Name der externen Quelldatenbank &uuml;bergeben und dann der Name der Zieldatei, also der aktuellen Datenbank (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-31-anchor\">Listing 4<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 4: Starten der Wiederherstellung<\/p>\n<pre>Private Sub cmdWiederherstellen_Click()\r\n    Dim strPfad As String\r\n    strPfad = OPENFILENAME(CurrentProject.Path)\r\n    If Len(Dir(strPfad)) &gt; 0 Then\r\n        MoveTablesAndRelations strPfad, CurrentDb.Name\r\n    End If\r\n    End Sub<\/pre>\n<p><b>Von A nach B und zur&uuml;ck<\/b><\/p>\n<p>Die Sicherung und die Wiederherstellung k&ouml;nnen in einem Zuge erkl&auml;rt werden, weil es sich um ein und denselben Vorgang handelt &#8211; nur mit umgekehrten Vorzeichen. Den Start macht jeweils die Prozedur <b>MoveTablesAndRelations<\/b>. Sie erwartet in dieser Reihenfolge die Parameter Quelldatei (<b>strSource<\/b>) und Zieldatei (<b>strTarget<\/b>), jeweils durch den Pfad und den Dateinamen angegeben (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-32-anchor\">Listing 5<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 5: Steuerprozedur f&uuml;r den Import\/Export<\/p>\n<pre>Public Sub MoveTablesAndRelations(strSource As String, _\r\n        strTarget As String)\r\n    Dim dbSource As DAO.Database\r\n    Dim dbTarget As DAO.Database\r\n    Set dbSource = GetDB(strSource)\r\n    Set dbTarget = GetDB(strTarget)\r\n    CopyTables dbSource, dbTarget\r\n    CopyRelations dbSource, dbTarget\r\nEnd Sub<\/pre>\n<p>Die Prozedur deklariert zwei <b>Database<\/b>-Objekte zum Speichern der Verweise auf die beteiligten Datenbank-Dateien. Diese f&uuml;llt sie mithilfe der Funktion <b>GetDB<\/b> aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-34-anchor\">Listing 6<\/a><\/span>. Diese Funktion erwartet lediglich den Dateinamen der jeweiligen Datenbank. Den jeweiligen Verweis auf das entsprechende <b>Database<\/b>-Objekt holt diese Funktion auf verschiedene Arten: Wenn es sich um die aktuell ge&ouml;ffnete Datei handelt, wird diese &uuml;ber die Funktion <b>CurrentDb <\/b>gef&uuml;llt. Die externe Datenbank muss erst noch ge&ouml;ffnet werden, was die Methode <b>OpenDatabase <\/b>erledigt. Der Verweis wird der Variablen <b>db <\/b>im gleichen Zuge zugewiesen und anschlie&szlig;end in die R&uuml;ckgabevariable <b>GetDB <\/b>geschrieben.<\/p>\n<p class=\"listingueberschrift\">Listing 6: Datenbankverweis holen<\/p>\n<pre>Public Function GetDB(strDB As String) As DAO.Database\r\n    Dim db As DAO.Database\r\n    If CurrentDb.Name = strDB Then\r\n        Set db = CurrentDb\r\n    Else\r\n        Set db = DBEngine(0).OpenDatabase(strDB)\r\n    End If\r\n    Set GetDB = db\r\nEnd Function<\/pre>\n<p><b>Tabellen kopieren<\/b><\/p>\n<p>Nachdem die Fronten bez&uuml;glich Quell- und Zieldatei gekl&auml;rt sind, ruft die Prozedur <b>MoveTablesAndRelations <\/b>die Funktion <b>CopyTables <\/b>auf. Diese Funktion finden Sie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-36-anchor\">Listing 7<\/a><\/span>. Sie erwartet Verweise auf Quell- und Zieldatenbank und erzeugt zun&auml;chst ein <b>Recordset<\/b>-Objekt auf Basis der Tabelle <b>tblTabellenExportImport<\/b>, die ja die entsprechende Konfiguration speichert. Dabei werden allerdings nur diejenigen Datens&auml;tze ber&uuml;cksichtigt, deren Feld <b>Export <\/b>den Wert <b>True <\/b>enth&auml;lt.<\/p>\n<p class=\"listingueberschrift\">Listing 7: Kopieren der Tabellen<\/p>\n<pre>Public Function CopyTables(dbSource As DAO.Database, dbTarget As DAO.Database)\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(&quot;SELECT * FROM tblTabellenExportImport WHERE Export = True&quot;, _\r\n        dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        On Error Resume Next\r\n        DropRelations dbTarget, rst!Tabelle\r\n        dbTarget.TableDefs.Delete rst!Tabelle\r\n        On Error GoTo 0\r\n        If CurrentDb.Name = dbSource.Name Then\r\n            DoCmd.TransferDatabase acExport, &quot;Microsoft Access&quot;, dbTarget.Name, acTable, _\r\n                rst!Tabelle, rst!Tabelle\r\n        Else\r\n            DoCmd.TransferDatabase acImport, &quot;Microsoft Access&quot;, dbSource.Name, acTable, _\r\n                rst!Tabelle, rst!Tabelle\r\n        End If\r\n        rst.MoveNext\r\n    Loop\r\nEnd Function<\/pre>\n<p>W&auml;hrend die Routine alle enthaltenen Datens&auml;tze durchl&auml;uft, ruft sie zun&auml;chst f&uuml;r jede Tabelle die Funktion <b>DropRelations <\/b>auf. Diese l&ouml;scht alle Beziehungen, die mit der jeweiligen Tabelle in Beziehung stehen &#8211; mehr dazu weiter unten. Erst danach kann die aktuelle Tabelle mit der <b>Delete<\/b>-Methode der <b>TableDefs<\/b>-Auflistung gel&ouml;scht werden.<\/p>\n<p>Nach dem L&ouml;schen der Tabelle in der Zieldatenbank wird diese gleich mithilfe der <b>TransferDatabase<\/b>-Methode wiederhergestellt, und zwar auf Basis der gleichnamigen Tabelle der jeweiligen Quelldatenbank. Dabei gibt es nur einen ganz kleinen Unterschied in der Behandlung: Wenn die aktuelle Datenbank die Quelldatenbank ist, wird diese Methode mit dem Wert <b>acExport <\/b>aufgerufen, falls die aktuelle Datenbank die Zieldatenbank ist, lautet der erste Parameter <b>acImport<\/b>. Zus&auml;tzlich wird noch der Name der jeweils anderen Datenbank als Name der Zieldatenbank angegeben. Dieser Vorgang wird f&uuml;r alle Tabellen durchgef&uuml;hrt, die in der Tabelle <b>tblTabellenExportImport <\/b>f&uuml;r den Export vorgesehen sind.<\/p>\n<p><b>Beziehungen l&ouml;schen<\/b><\/p>\n<p>Das weiter oben bereits erw&auml;hnte L&ouml;schen der Beziehungen erledigt die Prozedur <b>DropRelations<\/b> aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-43-anchor\">Listing 8<\/a><\/span>. Diese erwartet als Parameter einen Verweis auf das zu bearbeitende <b>Database<\/b>-Objekt sowie den Namen der Tabelle, deren Beziehungen gel&ouml;scht werden sollen. Die Routine durchl&auml;uft alle <b>Relation<\/b>-Objekte der Datenbank in einer <b>For&#8230;Next<\/b>-Schleife. Diese f&auml;ngt bei der Anzahl der Relation-Objekte minus 1 an und arbeitet sich r&uuml;ckw&auml;rts bis zum Objekt mit dem Index 0 vor. Dies ist sinnvoll, da ja zwischendurch gegebenenfalls Elemente der Auflistung gel&ouml;scht werden und sich somit der Index der nachfolgenden Elemente verschiebt. Wenn die Schleife beim letzten Element beginnt, wirken sich die L&ouml;schvorg&auml;nge nicht auf die Indizes der vorderen Elemente aus.<\/p>\n<p class=\"listingueberschrift\">Listing 8: L&ouml;schen der Beziehungen<\/p>\n<pre>Public Function DropRelations(db As DAO.Database, strTable As String)\r\n    Dim i As Integer\r\n    For i = db.Relations.Count - 1 To 0 Step -1\r\n        If db.Relations(i).ForeignTable = strTable Or db.Relations(i).Table = strTable Then\r\n            db.Relations.Delete db.Relations(i).Name\r\n        End If\r\n    Next i\r\nEnd Function<\/pre>\n<p>Innerhalb der Schleife pr&uuml;ft die Routine zun&auml;chst, ob das aktuelle <b>Relation<\/b>-Objekt die per Parameter &uuml;bergebene Tabelle entweder als Master- oder als Detailtabelle verwendet. Falls ja, wird die Beziehung mit der <b>Delete<\/b>-Methode gel&ouml;scht.<\/p>\n<p><b>Beziehungen erneuern<\/b><\/p>\n<p>Der letzte Schritt beim Sichern wie auch beim Wiederherstellen ist das Anlegen der Beziehungen zwischen den Tabellen. Dies erledigt die Funktion <b>CopyRelations <\/b>aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-44-anchor\">Listing 9<\/a><\/span>. Die Funktion erwartet ebenfalls Verweise auf die beiden beteiligten Datenbank-Objekte. Sie durchl&auml;uft alle <b>Relation<\/b>-Objekte der mit <b>dbSource <\/b>referenzierten Quelldatenbank in einer <b>For Each<\/b>-Schleife. Dabei pr&uuml;ft sie zun&auml;chst, ob eine der im Feld <b>Tabelle<\/b> der Tabelle <b>tblTabellenExportImport <\/b>angegebenen Tabellen als Master- oder Detailtabelle der Relation angegeben ist.<\/p>\n<p class=\"listingueberschrift\">Listing 9: &Uuml;bertragen der Beziehungen<\/p>\n<pre>Public Function CopyRelations(dbSource As DAO.Database, dbTarget As DAO.Database)\r\n    Dim relSource As DAO.Relation\r\n    Dim relTarget As DAO.Relation\r\n    Dim fldSource As DAO.Field\r\n    Dim fldTarget As DAO.Field\r\n    Dim intTable As Integer\r\n    Dim intForeignTable As Integer\r\n    For Each relSource In dbSource.Relations\r\n        intTable = DCount(&quot;TabelleID&quot;, &quot;tblTabellenExportImport&quot;, &quot;Tabelle = ''&quot; _\r\n        &amp; relSource.Table &amp; &quot;''&quot;)\r\n        intForeignTable = DCount(&quot;TabelleID&quot;, &quot;tblTabellenExportImport&quot;, &quot;Tabelle = ''&quot; _\r\n        &amp; relSource.ForeignTable &amp; &quot;''&quot;)\r\n        If intTable &gt; 0 And intForeignTable &gt; 0 Then\r\n            Set relTarget = dbTarget.CreateRelation(relSource.Name, relSource.Table, _\r\n            relSource.ForeignTable, relSource.Attributes)\r\n            For Each fldSource In relSource.Fields\r\n                Set fldTarget = relTarget.CreateField(fldSource.Name, dbLong)\r\n                With fldTarget\r\n                .ForeignName = fldSource.ForeignName\r\n                End With\r\n                relTarget.Fields.Append fldTarget\r\n            Next fldSource\r\n            dbTarget.Relations.Append relTarget\r\n        End If\r\n    Next relSource\r\nEnd Function<\/pre>\n<p>Falls ja, muss diese Relation in der Zieltabelle neu erstellt werden. Dazu erstellt die Funktion zun&auml;chst ein neues <b>Relation<\/b>-Objekt, dessen Name, Mastertabelle, Detailtabelle und Attribute mit den entsprechenden Werten der passenden Relation aus der Quelltabelle &uuml;bereinstimmt.<\/p>\n<p>Danach durchl&auml;uft die Routine alle <b>Field<\/b>-Elemente der <b>Fields<\/b>-Auflistung der Relation der Quelltabelle und legt jedes Feld als Element der <b>Fields<\/b>-Auflistung der frisch erstellten Relation an. Dazu verwendet es die <b>CreateField<\/b>-Methode, der wir den Namen des urspr&uuml;nglichen <b>Field<\/b>-Objekts &uuml;bergeben.<\/p>\n<p>Dem Feld muss au&szlig;erdem noch der Name des Fremdschl&uuml;sselfeldes der an der Relation beteiligten Tabelle &uuml;bergeben werden. Schlie&szlig;lich wird das Feld an die <b>Fields<\/b>-Auflistung der Relation angeh&auml;ngt. Dieser Vorgang wiederholt sich f&uuml;r alle Felder einer jeden anzulegenden Relation. Schlie&szlig;lich wird auch noch das frisch erstellte Relation-Objekt an die Relations-Auflistung der Zieldatenbank angeh&auml;ngt.<\/p>\n<p>Fertig &#8211; auf diese Weise &uuml;bertragen Sie per Mausklick ein komplettes Datenmodell samt Beziehungen und Daten in eine andere Datenbank.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Die hier vorgestellte L&ouml;sung erm&ouml;glicht es, einen bestimmten Stand des Datenmodells, also der Tabellen und Beziehungen einer Datenbank, samt Daten in eine andere, gegebenenfalls noch zu erstellende Datenbank zu exportieren.<\/p>\n<p>Bei Bedarf lassen sich die auf diese Weise gesicherten Daten leicht wiederherstellen.<\/p>\n<p>Dies ist beispielsweise sinnvoll, wenn Sie gerade eine Datenbankanwendung entwickeln und immer wieder, egal ob manuell oder per Code, neue Testdaten erzeugen oder die vorhandenen Daten bearbeiten. Nur einmal vor der Bearbeitung sichern und dann per Mausklick die Daten wiederherstellen &#8211; einfacher geht es kaum.<\/p>\n<p>Die L&ouml;sung ist noch erweiterbar: Zum Beispiel k&ouml;nnte man vor dem Zur&uuml;ckspielen des Datenmodells pr&uuml;fen, ob sich in der Zwischenzeit der Aufbau der Tabellen und Beziehungen in der Zieldatenbank ge&auml;ndert hat und eine Wiederherstellung der alten Daten gegebenenfalls einen Datenverlust nach sich zieht.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TabellenUndBeziehungenKopieren.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{1A393A09-A4B5-4DD5-94E9-2824AC5DB0D0}\/aiu_804.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W&auml;hrend Sie eine Datenbank programmieren, f&auml;llt unter Umst&auml;nden eine ganze Menge Datenm&uuml;ll an &#8211; Datens&auml;tze, die beim Test eingegeben werden und die Sie nicht mehr ben&ouml;tigen. Daf&uuml;r w&auml;re ein Satz realistischer Daten nicht schlecht. Dieser Beitrag zeigt, wie Sie das komplette Datenmodell einer Datenbank in einer zweiten Datenbank vorhalten und diese per Mausklick &uuml;ber die Tabellen der aktuell bearbeiteten Datenbank schreiben &#8211; und zwar inklusive Beziehungen.<\/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":[662011,66062011,44000021],"tags":[],"class_list":["post-55000804","post","type-post","status-publish","format-standard","hentry","category-662011","category-66062011","category-Tabellen_und_Datenmodellierung"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Tabellen und Beziehungen kopieren - 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\/Tabellen_und_Beziehungen_kopieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tabellen und Beziehungen kopieren\" \/>\n<meta property=\"og:description\" content=\"W&auml;hrend Sie eine Datenbank programmieren, f&auml;llt unter Umst&auml;nden eine ganze Menge Datenm&uuml;ll an - Datens&auml;tze, die beim Test eingegeben werden und die Sie nicht mehr ben&ouml;tigen. Daf&uuml;r w&auml;re ein Satz realistischer Daten nicht schlecht. Dieser Beitrag zeigt, wie Sie das komplette Datenmodell einer Datenbank in einer zweiten Datenbank vorhalten und diese per Mausklick &uuml;ber die Tabellen der aktuell bearbeiteten Datenbank schreiben - und zwar inklusive Beziehungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:58:52+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Tabellen und Beziehungen kopieren\",\"datePublished\":\"2020-05-22T21:58:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/\"},\"wordCount\":2126,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/83d8e56a1f274738a9cf6c3c5b4c2629\",\"articleSection\":[\"2011\",\"6\\\/2011\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/\",\"name\":\"Tabellen und Beziehungen kopieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/83d8e56a1f274738a9cf6c3c5b4c2629\",\"datePublished\":\"2020-05-22T21:58:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/83d8e56a1f274738a9cf6c3c5b4c2629\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/83d8e56a1f274738a9cf6c3c5b4c2629\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellen_und_Beziehungen_kopieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tabellen und Beziehungen kopieren\"}]},{\"@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":"Tabellen und Beziehungen kopieren - 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\/Tabellen_und_Beziehungen_kopieren\/","og_locale":"de_DE","og_type":"article","og_title":"Tabellen und Beziehungen kopieren","og_description":"W&auml;hrend Sie eine Datenbank programmieren, f&auml;llt unter Umst&auml;nden eine ganze Menge Datenm&uuml;ll an - Datens&auml;tze, die beim Test eingegeben werden und die Sie nicht mehr ben&ouml;tigen. Daf&uuml;r w&auml;re ein Satz realistischer Daten nicht schlecht. Dieser Beitrag zeigt, wie Sie das komplette Datenmodell einer Datenbank in einer zweiten Datenbank vorhalten und diese per Mausklick &uuml;ber die Tabellen der aktuell bearbeiteten Datenbank schreiben - und zwar inklusive Beziehungen.","og_url":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:58:52+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Tabellen und Beziehungen kopieren","datePublished":"2020-05-22T21:58:52+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/"},"wordCount":2126,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629","articleSection":["2011","6\/2011","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/","url":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/","name":"Tabellen und Beziehungen kopieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629","datePublished":"2020-05-22T21:58:52+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/83d8e56a1f274738a9cf6c3c5b4c2629"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Tabellen_und_Beziehungen_kopieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Tabellen und Beziehungen kopieren"}]},{"@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\/55000804","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=55000804"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000804\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}