{"id":55000204,"date":"2004-02-01T00:00:00","date_gmt":"2020-05-06T15:17:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=204"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Aenderungshistorie_von_Daten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/","title":{"rendered":"&Auml;nderungshistorie von Daten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Andr&eacute; Minhorst, Duisburg, und Dr. Holger H. Stutzke, Bremen<\/b><\/p>\n<p><b>Viele Anwendungen verlangen eine konsistente Historie aller &auml;nderungen im Datenbestand. Access bietet dazu keine perfekten M&ouml;glichkeiten, aber mit ein wenig Eigeninitiative seitens des Entwicklers ist die l&uuml;ckenlose Historie dennoch leicht realisierbar. Je nachdem, ob die Historie wirklich l&uuml;ckenlos sein muss oder ob Informationen wie Anlege-, &auml;nderungs- und L&ouml;schdaten der einzelnen Datens&auml;tze ausreichen, gibt es zwei Varianten f&uuml;r die Pflege einer Historie.<\/b><\/p>\n<p>Bei diversen Anwendungsf&auml;llen wird eine konsistente Speicherung aller Daten und Daten&auml;nderungen in einer Datenbank erwartet.<\/p>\n<p>Dabei kann es sich um sicherheits- oder finanztechnisch relevante Anwendungen handeln, bei denen eine l&uuml;ckenlose Historie sogar Pflicht ist, oder man m&ouml;chte aus anderen Gr&uuml;nden genau wissen, zu welchem Zeitpunkt welcher Datenbestand G&uuml;ltigkeit hatte. Wieder andere Anwendungen erfordern nur rudiment&auml;re Informationen &uuml;ber die &auml;nderung von Daten wie das jeweilige Datum und den durchf&uuml;hrenden Benutzer beim Erstellen, letzten &auml;ndern oder L&ouml;schen eines Datensatzes.<\/p>\n<p>Beide Methoden erfordern, dass die gew&uuml;nschten Daten beim Erstellen, &auml;ndern oder L&ouml;schen von Informationen gespeichert werden, und das nat&uuml;rlich automatisch.<\/p>\n<p>Access bietet dazu keine speziellen Mittel, sodass die ben&ouml;tigten Aktionen unmittelbar bei der Dateneingabe, also im entsprechenden Formular, vorgenommen werden m&uuml;ssen. Da die Speicherung automatisch erfolgen soll, verwendet man am besten die Ereignisprozeduren, die unmittelbar vor beziehungsweise nach der &auml;nderung der Daten ausgel&ouml;st werden.<\/p>\n<p>Client-Server-Systeme wie Microsoft SQL Server, dessen abgespeckte Version MSDE und andere bieten f&uuml;r solche &auml;nderungsdaten so genannte Trigger an, die automatisch beim Anlegen, &auml;ndern oder L&ouml;schen von Datens&auml;tzen ausgel&ouml;st werden und die Werte der Tabellenfelder vor und nach der &auml;nderung bereitstellen.<\/p>\n<p>Da Access diese Vorz&uuml;ge nicht bietet, lernen Sie im vorliegenden Beitrag, wie Sie eine formulargesteuerte Funktionalit&auml;t zur Pflege einer &auml;nderungshistorie erstellen.<\/p>\n<p>Sie k&ouml;nnen nat&uuml;rlich nur eine &auml;nderungshistorie zu Datens&auml;tzen f&uuml;hren, die auch vorhanden sind. Sie m&uuml;ssen sich also an dieser Stelle entscheiden, ob mit einem gel&ouml;schten Datensatz auch die Historie des Datensatzes gel&ouml;scht werden soll. Lautet die Antwort ja, haben Sie sich definitiv f&uuml;r die einfacher zu realisierende Variante entschieden.<\/p>\n<p>Leider sehen die Anforderungen sicherheits- oder finanztechnisch kritischer Anwendungen den anderen Fall vor. Das bedeutet, dass Sie auch gel&ouml;schte Datens&auml;tze nicht so einfach entfernen d&uuml;rfen. Und damit stellt sich erneut eine wichtige Frage: M&ouml;chten Sie die gel&ouml;schten Daten mit einem entsprechenden Flag versehen und alle Abfragen und Datenherk&uuml;nfte so anpassen, dass nur als nicht gel&ouml;scht gekennzeichnete Datens&auml;tze angezeigt werden, oder m&ouml;chten Sie die Datens&auml;tze tats&auml;chlich aus der Ursprungstabelle l&ouml;schen, im gleichen Schritt aber in einer weiteren Tabelle gleichen Aufbaus archivieren<\/p>\n<p>Die Auflistung der Techniken und der Vor- und Nachteile der beiden Varianten k&ouml;nnte wahrscheinlich einen eigenen Beitrag f&uuml;llen. An dieser Stelle wird davon ausgegangen, dass Performance und Speicherplatz Sie nicht daran hindern, gel&ouml;schte Daten durch das Setzen eines Flags als solche zu markieren und sie nicht zu l&ouml;schen oder zu verschieben.<\/p>\n<p>Wenn &auml;nderungen unter Angabe des Ausf&uuml;hrenden gespeichert werden sollen, m&uuml;ssen Sie dessen Identit&auml;t ermitteln. Das k&ouml;nnen Sie auf unterschiedliche Arten erledigen. Die richtige Auswahl h&auml;ngt unter anderem davon ab, ob die Datenbank das Sicherheitssystem von Access verwendet. Falls ja, k&ouml;nnen Sie einfach den Namen des aktuellen Benutzers eintragen. Den Namen k&ouml;nnen Sie mit folgender Funktion ermitteln:<\/p>\n<pre>=CurrentUser()<\/pre>\n<p>Falls nein, k&ouml;nnen Sie beispielsweise den Namen des aktuell auf dem Rechner eingeloggten Benutzers verwenden &#8211; Beispiele f&uuml;r die Ermittlung dieses Benutzers finden Sie im Modul mdlBenutzerinformationen der Beispieldatenbank.<\/p>\n<p>Die einfache &auml;nderungshistorie dient einfach nur der Protokollierung des Benutzers und des Datums f&uuml;r das Anlegen, die letzte &auml;nderung und f&uuml;r das L&ouml;schen eines Datensatzes. Sie erfordert folgende Ma&szlig;nahmen:<\/p>\n<li>Hinzuf&uuml;gen von Feldern zum Speichern der &auml;nderungsdaten in den entsprechenden Tabellen<\/li>\n<li>Hinzuf&uuml;gen von Ereignisprozeduren zu den Formularen, in denen die Daten bearbeitet werden<\/li>\n<h3>Hinweis<\/h3>\n<p>Die Beschreibung der Ma&szlig;nahmen erfolgt anhand der Tabellen Artikel, Kategorie und Lieferanten sowie des Formulars Artikel, die Sie zum Nachvollziehen der nachfolgenden Schritte am besten aus der Nordwind-Datenbank in eine neue, leere Datenbank importieren. Sie finden die fertigen Beispiele allerdings auch auf der Heft-CD. Die Dateien hei&szlig;en Historie97.mdb (f&uuml;r Access 97) und Historie00.mdb (f&uuml;r Access 2000 und h&ouml;her). <\/p>\n<h2>Vorbereiten der Tabelle<\/h2>\n<p>Damit Sie die &auml;nderungsdaten in der Tabelle speichern k&ouml;nnen, m&uuml;ssen Sie den Entwurf entsprechend anpassen. Dazu legen Sie die folgenden Felder neu an:<\/p>\n<li>ErstelltAm<\/li>\n<li>ErstelltDurch<\/li>\n<li>LetzteAenderungAm<\/li>\n<li>LetzteAenderungDurch<\/li>\n<li>GeloeschtAm<\/li>\n<li>GeloeschtDurch<\/li>\n<li>Die Felder zum Speichern der Datumsangaben erhalten den Datentyp Datum\/Zeit, die Felder zum Speichern der jeweiligen Benutzer den Datentyp Text.<\/li>\n<h2>Anpassen des Formulars<\/h2>\n<p>Nun passen Sie das Formular so an, dass bei jeder &auml;nderung an einem Datensatz eine entsprechende Protokollierung erfolgt.<\/p>\n<p>Das bedeutet, dass Sie drei unterschiedliche Aktionen ber&uuml;cksichtigen m&uuml;ssen: das Anlegen neuer Datens&auml;tze und das &auml;ndern und L&ouml;schen bestehender Datens&auml;tze.<\/p>\n<pre>Private Sub Form_BeforeInsert(Cancel As Integer)\r\n    Me!AngelegtAm = Date\r\n    Me!AngelegtDurch = CurrentUser\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Private Sub Form_BeforeUpdate(Cancel As Integer)\r\n    Me!GeaendertAm = Date\r\n    Me!GeaendertDurch = CurrentUser\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<pre>Private Sub Form_BeforeUpdate(Cancel As Integer)\r\n    If Me.NewRecord Then\r\n        Me!AngelegtAm = Date\r\n        Me!AngelegtDurch = CurrentUser\r\n    Else\r\n        Me!GeaendertAm = Date\r\n        Me!GeaendertDurch = CurrentUser\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die nachfolgende Beschreibung bezieht sich auf das Formular Artikel der Nordwinddatenbank. <\/p>\n<h2>Anlegen von Datens&auml;tzen<\/h2>\n<p>Das Anlegen eines Datensatzes l&ouml;st das Ereignis Vor Eingabe aus. Das Speichern dieses neuen Datensatzes l&ouml;st das Ereignis Nach Eingabe aus. Das erstgenannte Ereignis ist f&uuml;r das Anlegen der &auml;nderungsdaten interessant. Legen Sie f&uuml;r diese Ereigniseigenschaft die Prozedur aus Quellcode 1 an.<\/p>\n<p>Wenn Sie nun einen neuen Datensatz anlegen, weist die Prozedur den beiden Feldern AngelegtAm und AngelegtDurch die Werte der Funktionen Date und CurrentUser zu.<\/p>\n<h2>&auml;ndern von Datens&auml;tzen<\/h2>\n<p>Eine Datensatz&auml;nderung liegt immer vor, wenn mindestens ein Feld des Datensatzes ge&auml;ndert wurde. Das Ereignis, das beim Speichern eines ge&auml;nderten Datensatzes ausgel&ouml;st wird, hei&szlig;t Vor Aktualisierung. Unmittelbar nach dem Speichern wird noch das Ereignis Nach Aktualisierung ausgel&ouml;st &#8211; soweit der Speichervorgang nicht in der Ereignisprozedur f&uuml;r das Ereignis Vor Aktualisierung abgebrochen wird oder ein Fehler auftritt. Mit der Ereignisprozedur aus Quellcode 2 legen Sie die &auml;nderungsdaten an.<\/p>\n<p><!--30percent--><\/p>\n<p>Die Prozedur belegt die beiden Felder GeaendertAm und GeaendertDurch mit den entsprechenden Werten. Direkt im Anschluss wird die neue Version des Datensatzes gespeichert.<\/p>\n<h3>Anlegen und &auml;ndern in einem Schritt<\/h3>\n<p>Zu beachten ist, dass auch das Neuanlegen eines Datensatzes diese beiden Prozeduren ausl&ouml;st. Damit w&uuml;rden beim Neuanlegen sowohl die Felder f&uuml;r das Neuanlegen als auch f&uuml;r das &auml;ndern eines Datensatzes aktualisiert.<\/p>\n<p>Wenn die Felder GeaendertAm und GeaendertDurch beim Neuanlegen eines Datensatzes nicht ge&auml;ndert werden sollen, verwenden Sie die Prozedur aus Quellcode 3 f&uuml;r das Ereignis Vor Aktualisierung.<\/p>\n<p>Die Prozedur &uuml;berpr&uuml;ft, ob es sich bei dem Datensatz um einen neuen Datensatz handelt, und &auml;ndert die entsprechenden Felder.<\/p>\n<h2>L&ouml;schen vonDatens&auml;tzen<\/h2>\n<p>Das L&ouml;schen eines Datensatzes l&ouml;st das Ereignis Beim L&ouml;schen aus. Da das L&ouml;schen eines Datensatzes auch automatisch die Historie mitl&ouml;schen w&uuml;rde, sollen lediglich die beiden Felder GeloeschtDurch und GeloeschtAm aktualisiert und der eigentliche L&ouml;schvorgang abgebrochen werden.<\/p>\n<p>Zus&auml;tzlich m&uuml;ssen Sie nat&uuml;rlich die Datenherkunft des Formulars so anpassen, dass Datens&auml;tze, die einen Wert f&uuml;r eines der Felder GeloeschtAm oder GeloeschtDurch enthalten, nicht mehr angezeigt werden. Daher &auml;ndern Sie die Eigenschaft Datenherkunft auf den folgenden Wert:<\/p>\n<pre>Private Sub Form_Delete(Cancel As Integer)\r\n    Geloescht = True\r\nEnd Sub\r\nPrivate Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)\r\n    Cancel = True\r\nEnd Sub\r\nPrivate Sub Form_AfterDelConfirm(Status As Integer)\r\n    Me!GeloeschtAm = Date\r\n    Me!GeloeschtDurch = CurrentUser\r\n    Me.Requery\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<pre>Private Sub Form_BeforeUpdate(Cancel As Integer)\r\n    If Geloescht = True Then\r\n        Geloescht = False\r\n    Else\r\n        If Me.NewRecord Then\r\n            Me!AngelegtAm = Date\r\n            Me!AngelegtDurch = CurrentUser\r\n        Else\r\n            Me!GeaendertAm = Date\r\n            Me!GeaendertDurch = CurrentUser\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>SELECT * FROM Artikel WHERE GeloeschtAm IS NULL<\/pre>\n<p>Der ben&ouml;tigte Vorgang ist ein wenig komplizierter und Sie brauchen dazu drei Funktionen: Beim L&ouml;schen, Vor L&ouml;schabfrage und Nach L&ouml;schabfrage. Der Eigenschaft Beim L&ouml;schen k&ouml;nnen Sie eine Prozedur hinzuf&uuml;gen, die den L&ouml;schvorgang unter bestimmten Umst&auml;nden abbricht und weitere Anweisungen ausf&uuml;hrt.<\/p>\n<p>Das w&auml;re f&uuml;r diesen Zweck eigentlich ausreichend, denn hier k&ouml;nnten Sie die Werte der beiden Felder GeloeschtAm und GeloeschtDurch auf die entsprechenden Werte einstellen.<\/p>\n<p>Leider k&ouml;nnen Sie in dieser Prozedur nicht die Requery-Methode des Formulars aufrufen, die unter anderem dem Aktualisieren der Datenherkunft des Formulars dient. Das w&uuml;rde bedeuten, dass zwar die beiden Felder GeloeschtAm und GeloeschtDurch die gew&uuml;nschten Werte haben, aber dass weder der Datensatz noch die Datenherkunft des Formulars aktualisiert sind &#8211; was schlichtweg gleichbedeutend damit ist, dass der Benutzer den Datensatz noch sehen kann.<\/p>\n<p><IMG height=\"417\" src=\"..\/fileadmin\/_temp_\/{B8E38092-7634-4B0C-B184-6BB929FEE526}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Entwurfsansicht der Tabelle tblAenderungen<\/span><\/b><\/p>\n<p>Damit der Datensatz als gel&ouml;scht markiert und direkt anschlie&szlig;end die Datenherkunft aktualisiert wird, verwenden Sie die drei Prozeduren aus Quellcode 4 f&uuml;r die drei oben genannten Ereigniseigenschaften.<\/p>\n<p>Zus&auml;tzlich deklarieren Sie im Kopf des Klassenmoduls noch eine Variable:<\/p>\n<pre>Dim Geloescht As Boolean<\/pre>\n<p>In der Prozedur Form_Delete wird nur die Variable Geloescht auf den Wert True gesetzt. Damit wird der L&ouml;schvorgang an dieser Stelle noch nicht abgebrochen, sondern zun&auml;chst durchgef&uuml;hrt! Erst in der Prozedur Form_BeforeDelConfirm wird der Parameter Cancel auf den Wert True gesetzt und der L&ouml;schvorgang damit r&uuml;ckg&auml;ngig gemacht.<\/p>\n<p>Die Prozedur Form_AfterDelConfirm schlie&szlig;lich setzt die beiden Felder GeloeschtAm und GeloeschtDurch auf die entsprechenden Werte und aktualisiert die Datenherkunft. Da diese nur die Datens&auml;tze enth&auml;lt, deren Feld GeloeschtAm Null ist, wird der soeben &#8222;gel&ouml;schte&#8220; Datensatz nicht mehr angezeigt.<\/p>\n<p>Durch die Requery-Methode des Formulars wird unter anderem das Ereignis Vor Aktualisierung ausgel&ouml;st, das ja, wie oben beschrieben, die beiden Felder GeaendertAm und GeaendertDurch aktualisiert. Beim L&ouml;schen eines Datensatzes sollen diese beiden Werte allerdings nicht angepasst werden. Daher &auml;ndern Sie die entsprechende Ereignisprozedur wie in Quellcode 5.<\/p>\n<p>Die Funktion hat nun eine zus&auml;tzliche If-Abfrage, die den Wert der Variablen Geloescht &uuml;berpr&uuml;ft. Hat dieser den Wert True, wird die Anpassung der Felder GeaendertAm und GeaendertDurch nicht durchgef&uuml;hrt. Die Variable Geloescht wird wieder auf den Wert False gesetzt, damit bei einer eventuell folgenden &auml;nderung die &auml;nderungsinformationen wieder gesetzt werden k&ouml;nnen.<\/p>\n<p>Wenn die Anspr&uuml;che an die Konsistenz der Historie h&ouml;her sind und der Zustand der Datenbank zu jedem Zeitpunkt rekonstruierbar sein soll, ist ein wenig mehr Aufwand erforderlich.<\/p>\n<p>Die &auml;nderungshistorie soll s&auml;mtliche &auml;nderungen speichern &#8211; vom Erstellen des Datensatzes &uuml;ber die &auml;nderung einzelner Felder bis hin zum L&ouml;schen des Datensatzes.<\/p>\n<p>Alle &auml;nderungen werden in einer separaten Tabelle archiviert. Diese Tabelle enth&auml;lt Felder zum Speichern des Tabellennamens und Feldnamens, in dem die &auml;nderung vorgenommen wurde, den Zeitpunkt der &auml;nderung sowie den alten und den neuen Wert und den Benutzer, in dessen Kontext die &auml;nderungen durchgef&uuml;hrt werden.<\/p>\n<p>Au&szlig;erdem speichert die Tabelle die Aktion, die mit der jeweiligen &auml;nderung zusammenh&auml;ngt &#8211; also anlegen, &auml;ndern oder l&ouml;schen. Sehr wichtig ist die Angabe des Wertes des Prim&auml;rschl&uuml;sselfeldes des ge&auml;nderten Datensatzes. Den Entwurf dieser Tabelle finden Sie in Bild 1.<\/p>\n<pre>Private Sub Form_BeforeUpdate(Cancel As Integer)\r\n    Dim Primaerschluesselfeld As String\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim ctl As Control\r\n    Dim ctlType As Integer\r\n    Dim ctlSource As String\r\n    Dim rstSource As String\r\n    Dim AlterWert As String\r\n    Dim NeuerWert As String\r\n    Dim Aktion As String\r\n    If Me.NewRecord Then\r\n        Aktion = \"Neuanlage\"\r\n    Else\r\n        Aktion = \"&auml;nderung\"\r\n    End If\r\n    Primaerschluesselfeld = \"Lieferanten-Nr\"\r\n    rstSource = Me.RecordSource\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(\"tblAenderungen\", dbOpenDynaset)<\/pre>\n<p><b>Quellcode 6 (erster Teil)<\/b><\/p>\n<h2>Voraussetzungen<\/h2>\n<p>Die &auml;nderungshistorie erfolgt formulargesteuert, das bedeutet, dass lediglich die in einem Formular vorgenommenen &auml;nderungen auch archiviert werden.<\/p>\n<p>&auml;nderungen, die Sie direkt an den Tabellen vornehmen, werden nicht ber&uuml;cksichtigt. Dadurch, dass die &auml;nderungen durch Formularereignisse gespeichert werden, sind einige Voraussetzungen zu erf&uuml;llen:<\/p>\n<li>Die Datenherkunft muss eine Tabelle sein, es darf keine Abfrage verwendet werden.<\/li>\n<li>Die Datenherkunft muss einen eindeutigen Prim&auml;rindex haben, der nicht aus mehr als einem Feld bestehen darf und im Entwurf an erster Stelle stehen muss.<\/li>\n<h3>Hinweis<\/h3>\n<p>Als Beispiel f&uuml;r die Anwendung einer detaillierten Historie dient die Tabelle Lieferanten und das entsprechende Formular Lieferanten. <\/p>\n<h2>Einbau der Funktionalit&auml;t in das Formular<\/h2>\n<p>Damit die &auml;nderungshistorie beim Anlegen und &auml;ndern des Datensatzes gepflegt wird, legen Sie f&uuml;r die Ereigniseigenschaft Vor Aktualisierung die Prozedur aus Quellcode 6 an.<\/p>\n<p>Die Prozedur &uuml;berpr&uuml;ft zun&auml;chst, ob es sich bei dem ge&auml;nderten Datensatz um einen neuen oder einen vorhandenen Datensatz handelt, und schreibt in Abh&auml;ngigkeit davon einen der beiden Werte Neuanlage oder &auml;nderung in die Variable Aktion. Der Variablen Primaerschluesselfeld weisen Sie den Namen des Prim&auml;rschl&uuml;sselfeldes der dem Formular zugrunde liegenden Tabelle zu.<\/p>\n<p>Auf die gleiche Weise erh&auml;lt die Variable rstSource als Wert den Namen der entsprechenden Tabelle. Nach dem Vorbereiten der Tabelle tblAenderungen f&uuml;r das Eintragen der &auml;nderungsdaten durchl&auml;uft die Prozedur alle Steuerelemente des Formulars. Dabei &uuml;berpr&uuml;ft sie, um welchen Steuerelementtyp es sich handelt. Ist es einer der folgenden Typen, k&ouml;nnte es an die Datenherkunft gebundene Daten enthalten und wir n&auml;her untersucht:<\/p>\n<pre>    For Each ctl In Me.Controls\r\n        ctlType = ctl.ControlType\r\n        Select Case ctlType\r\n            Case acCheckBox, acComboBox, acListBox, acTextBox, acOptionGroup\r\n                ctlSource = ctl.ControlSource\r\n                If Not IsNull(ctlSource) And Not ctlSource = _                    Primaerschluesselfeld Then\r\n                    AlterWert = Nz(ctl.OldValue)\r\n                    NeuerWert = Nz(ctl.Value)\r\n                    If Not (AlterWert = NeuerWert) Then\r\n                        rst.AddNew\r\n                        rst!Aktion = Aktion\r\n                        rst!Tabellenname = rstSource\r\n                        rst!Feldname = ctlSource\r\n                        rst!Primaerschluessel = Me(Primaerschluesselfeld)\r\n                        rst!Datum = Date\r\n                        rst!Uhrzeit = Time\r\n                        rst!Benutzer = CurrentUser\r\n                        rst!AlterWert = AlterWert\r\n                        rst!NeuerWert = NeuerWert\r\n                        rst.Update\r\n                    End If\r\n                End If\r\n        End Select\r\n    Next ctl\r\nEnd Sub<\/pre>\n<p><b>Quellcode 6 (Fortsetzung)<\/b><\/p>\n<li>Textfeld (acTextbox)<\/li>\n<li>Kombinationsfeld (acCombobox)<\/li>\n<li>Listenfeld (acListbox)<\/li>\n<li>Kontrollk&auml;stchen (acCheckbox)<\/li>\n<li>Optionsgruppe (acOptiongroup)<\/li>\n<p>Wenn das aktuelle Steuerelement einen Steuerelementinhalt hat und nicht an das Prim&auml;rschl&uuml;sselfeld der Tabelle gebunden ist, handelt es sich um ein Steuerelement, dass Daten der zugrundeliegenden Tabelle enth&auml;lt.<\/p>\n<p>Daraufhin wird &uuml;berpr&uuml;ft, ob sich der Inhalt des Steuerelements ge&auml;ndert hat. Der alte und der neue Wert werden dazu vorher in leere Zeichenketten umgewandelt, falls einer der beiden den Wert Null hat.<\/p>\n<p>Wenn der Inhalt des Feldes ge&auml;ndert wurde, legt die Prozedur in der Tabelle tblAenderungen einen neuen Datensatz mit den ermittelten Daten an.<\/p>\n<p>Nun fehlt noch das Hinzuf&uuml;gen eines entsprechenden Eintrags, falls ein Datensatz gel&ouml;scht wird. Dazu legen Sie einfach die Prozedur aus Quellcode 7 f&uuml;r die Ereigniseigenschaft Beim L&ouml;schen an.<\/p>\n<p><IMG height=\"185\" src=\"..\/fileadmin\/_temp_\/{B8E38092-7634-4B0C-B184-6BB929FEE526}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Vollst&auml;ndige Historie eines Datensatzes<\/span><\/b><\/p>\n<pre>Private Sub Form_Delete(Cancel As Integer)\r\n    Dim db As Database\r\n    Set db = CurrentDb\r\n    db.Execute \"INSERT INTO tblAenderungen(Tabellenname, Aktion, \" _        & \"Primaerschluessel, \"Datum, Uhrzeit, Benutzer) VALUES(''\" & Me.RecordSource _        & \"'', ''Gel&ouml;scht'', ''\" & Me![Lieferanten-Nr] & \"'', ''\" & Date & \"'', ''\" & Time _        & \"'', ''\" & CurrentUser & \"'')\"\r\nEnd Sub<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<p>Die Prozedur legt per Anf&uuml;geabfrage einen neuen Datensatz in der Tabelle tblAenderungen an. Dieser Datensatz verwendet nur wenige Felder, n&auml;mlich den Tabellennamen, die Aktion, in diesem Fall Gel&ouml;scht, die Nummer des gel&ouml;schten Datensatzes sowie Datum, Zeit und Benutzer beim L&ouml;schvorgang.<\/p>\n<p>Bild 2 zeigt die vollst&auml;ndige durch die vorgestellten Prozeduren erstellte Historie eines Datensatzes vom Anlegen &uuml;ber die &auml;nderung des Inhalts eines Feldes bis hin zum L&ouml;schen des Datensatzes.<\/p>\n<p>Mit den Informationen in der Tabelle kann der Stand zu jedem Zeitpunkt wieder hergestellt werden. Aus Platzgr&uuml;nden ist leider an dieser Stelle keine vollst&auml;ndige Beschreibung dieses Vorgangs m&ouml;glich. Mit geeigneten Prozeduren k&ouml;nnen Sie sowohl den kompletten Bestand zu einem bestimmten Zeitpunkt darstellen oder auch einzelne Datens&auml;tze heraussuchen und deren Historie anzeigen.<\/p>\n<p>Die hier vorgestellten Methoden vermitteln Ihnen einen guten Eindruck von unterschiedlichen M&ouml;glichkeiten der Verwaltung einer &auml;nderungshistorie von Daten in einer Access-Datenbank. <\/p>\n<p>Um die Prozeduren datenbankweit und von mehreren Formularen aus einsetzen zu k&ouml;nnen, sollten Sie die Anweisungen in Funktionen unterbringen, die Sie dann von allen Formularen aus aufrufen k&ouml;nnen. Als Parameter w&auml;ren der Formularname, der Name der Datenherkunft sowie der Name des Prim&auml;rschl&uuml;sselfeldes des aktuellen Formulars vorzusehen. Eine andere denkbare Erweiterung ist eine Schnittstelle, &uuml;ber die der Benutzer den Datenbestand zu beliebigen Zeitpunkten einsehen kann, ohne dass die bestehenden Daten ber&uuml;hrt werden. Auch die Wiederherstellung der Daten der &auml;nderungshistorie ist eine sch&ouml;ne Aufgabe f&uuml;r ambitionierte Access-Entwickler. Dieses Thema wird sicher in einer der n&auml;chsten Ausgaben oder im Internet unter www.access-im-unternehmen.de behandelt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Viele Anwendungen verlangen eine konsistente Historie aller &Auml;nderungen im Datenbestand. Access bietet dazu keine perfekten M&ouml;glichkeiten, aber mit ein wenig Eigeninitiative seitens des Entwicklers ist die l&uuml;ckenlose Historie dennoch leicht realisierbar. Je nachdem, ob die Historie wirklich l&uuml;ckenlos sein muss oder ob Informationen wie Anlege-, &Auml;nderungs- und L&ouml;schdaten der einzelnen Datens&auml;tze ausreichen, gibt es zwei Varianten f&uuml;r die Pflege einer Historie.<\/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":[66012004,662004,44000027,44000021],"tags":[],"class_list":["post-55000204","post","type-post","status-publish","format-standard","hentry","category-66012004","category-662004","category-Loesungen","category-Tabellen_und_Datenmodellierung"],"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>&Auml;nderungshistorie von Daten - 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\/Aenderungshistorie_von_Daten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"&Auml;nderungshistorie von Daten\" \/>\n<meta property=\"og:description\" content=\"Viele Anwendungen verlangen eine konsistente Historie aller &Auml;nderungen im Datenbestand. Access bietet dazu keine perfekten M&ouml;glichkeiten, aber mit ein wenig Eigeninitiative seitens des Entwicklers ist die l&uuml;ckenlose Historie dennoch leicht realisierbar. Je nachdem, ob die Historie wirklich l&uuml;ckenlos sein muss oder ob Informationen wie Anlege-, &Auml;nderungs- und L&ouml;schdaten der einzelnen Datens&auml;tze ausreichen, gibt es zwei Varianten f&uuml;r die Pflege einer Historie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:36+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3\" \/>\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\\\/Aenderungshistorie_von_Daten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"&Auml;nderungshistorie von Daten\",\"datePublished\":\"2020-05-06T15:17:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/\"},\"wordCount\":2655,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/57ddec699dfb4a8aac7a2c391c2d62a3\",\"articleSection\":[\"1\\\/2004\",\"2004\",\"L\u00f6sungen\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/\",\"name\":\"&Auml;nderungshistorie von Daten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/57ddec699dfb4a8aac7a2c391c2d62a3\",\"datePublished\":\"2020-05-06T15:17:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/57ddec699dfb4a8aac7a2c391c2d62a3\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/57ddec699dfb4a8aac7a2c391c2d62a3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Aenderungshistorie_von_Daten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"&Auml;nderungshistorie von Daten\"}]},{\"@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":"&Auml;nderungshistorie von Daten - 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\/Aenderungshistorie_von_Daten\/","og_locale":"de_DE","og_type":"article","og_title":"&Auml;nderungshistorie von Daten","og_description":"Viele Anwendungen verlangen eine konsistente Historie aller &Auml;nderungen im Datenbestand. Access bietet dazu keine perfekten M&ouml;glichkeiten, aber mit ein wenig Eigeninitiative seitens des Entwicklers ist die l&uuml;ckenlose Historie dennoch leicht realisierbar. Je nachdem, ob die Historie wirklich l&uuml;ckenlos sein muss oder ob Informationen wie Anlege-, &Auml;nderungs- und L&ouml;schdaten der einzelnen Datens&auml;tze ausreichen, gibt es zwei Varianten f&uuml;r die Pflege einer Historie.","og_url":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:36+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3","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\/Aenderungshistorie_von_Daten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"&Auml;nderungshistorie von Daten","datePublished":"2020-05-06T15:17:36+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/"},"wordCount":2655,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3","articleSection":["1\/2004","2004","L\u00f6sungen","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/","url":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/","name":"&Auml;nderungshistorie von Daten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3","datePublished":"2020-05-06T15:17:36+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/57ddec699dfb4a8aac7a2c391c2d62a3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Aenderungshistorie_von_Daten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"&Auml;nderungshistorie von Daten"}]},{"@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\/55000204","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=55000204"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000204\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}