{"id":55001205,"date":"2019-10-01T00:00:00","date_gmt":"2020-05-13T20:56:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1205"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Rueckgaengig_in_Memofeldern","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/","title":{"rendered":"R&uuml;ckg&auml;ngig in Memofeldern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Seit Access 2007 bietet Access f&uuml;r Memofelder die M&ouml;glichkeit, die verschiedenen Versionen zu speichern. Wie aber k&ouml;nnen wir solche &Auml;nderungen wieder r&uuml;ckg&auml;ngig machen, ohne dass der Benutzer die eingebauten Funktionen daf&uuml;r nutzen muss oder gar ein extra Formular, dass die bisher gespeicherten Versionen anzeigt Sondern einfach etwa mit zwei Schaltfl&auml;chen, mit denen er zwischen den vorhandenen History-Eintr&auml;gen hin- und herbl&auml;ttern kann Wie das gelingt, zeigen wir in diesem Beitrag.<\/b><\/p>\n<h2>Vorbereitungen<\/h2>\n<p>Wenn Sie ein Memofeld verwenden wollen, um verschiedene Versionsst&auml;nde des enthaltenen Textes speichern zu k&ouml;nnen, brauchen Sie prinzipiell nur eine einzige Eigenschaft des Memofeldes zu &auml;ndern (in aktuelleren Versionen von Access hei&szlig;t der Datentyp f&uuml;r l&auml;ngere Texte &uuml;brigens nicht mehr <b>Memofeld<\/b>, sondern <b>Langer Text<\/b>).<\/p>\n<p>Diese Eigenschaft stellen Sie im Entwurf der Tabelle mit dem Memofeld ein, indem Sie dieses markieren und dann f&uuml;r die Eigenschaft <b>Nur Anf&uuml;gen <\/b>den Wert <b>Ja <\/b>festlegen &#8211; wie f&uuml;r das Feld <b>Inhalt <\/b>in Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_001.png\" alt=\"Memofeld mit History-Funktion\" width=\"549,6265\" height=\"392,3131\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Memofeld mit History-Funktion<\/span><\/b><\/p>\n<p>Wenn Sie nun in die Datenblattansicht wechseln, k&ouml;nnen Sie wie gewohnt Texte in das Memofeld eingeben &#8211; etwa so wie in Bild 2.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_002.png\" alt=\"Eingeben eines Textes\" width=\"424,7115\" height=\"166,1529\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Eingeben eines Textes<\/span><\/b><\/p>\n<p>Speichern Sie den Text nun, indem Sie das Feld verlassen, und f&uuml;gen Sie dann weiteren Text hinzu &#8211; siehe Bild 3.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_003.png\" alt=\"Eingeben eines weiteren Textes\" width=\"424,7115\" height=\"166,1529\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Eingeben eines weiteren Textes<\/span><\/b><\/p>\n<p>Die Datenblattansicht zeigt nun die neueste Version des Inhalts des Memofelds an.<\/p>\n<p>Wie greifen wir nun auf die Historie zu Diese erhalten wir, indem wir aus dem Kontextmen&uuml; des Feldes in der Datenblattansicht den Eintrag <b>Spaltenverlauf anzeigen&#8230; <\/b>aufrufen (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_004.png\" alt=\"Aufruf der Historie\" width=\"424,7115\" height=\"268,3224\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Aufruf der Historie<\/span><\/b><\/p>\n<p>Danach erscheint der Dialog <b>Verlauf f&uuml;r Inhalt<\/b>, der in einem Textfeld alle &Auml;nderungsdaten samt des zu diesem Zeitpunkt vorliegenden Inhalts anzeigt (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_005.png\" alt=\"Anzeige der Historie\" width=\"424,7115\" height=\"284,9063\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Anzeige der Historie<\/span><\/b><\/p>\n<p>Damit erhalten wir allerdings noch nicht die Gelegenheit, auf einen bestimmten Versionsstand zuzugreifen und diesen wiederherzustellen.<\/p>\n<h2>Versionsst&auml;nde per VBA abfragen<\/h2>\n<p>Wenn wir versuchen, die Versionsst&auml;nde per <b>DLookup <\/b>abzufragen, erhalten wir jeweils nur die aktuelle Version des Memofeld-Inhalts:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> Dlookup(\"Inhalt\", \"tblMemofeld\")\r\nBeispieltext. Noch mehr Beispieltext.<\/pre>\n<p>Es gibt jedoch eine neue Methode des <b>Application<\/b>-Objekts namens <b>ColumnHistory<\/b>, welche auch den im Textfeld des Dialogs <b>Verlauf f&uuml;r Inhalt <\/b>angezeigten Text liefert. Diese erwartet drei Parameter:<\/p>\n<ul>\n<li><b>TableName<\/b>: Name der Tabelle, in der sich das Memo-feld befindet.<\/li>\n<li><b>ColumnName<\/b>: Name des Memofelds<\/li>\n<li><b>queryString<\/b>: Bedingung f&uuml;r den zu untersuchenden Datensatz. Hierbei handelt es sich im Gegensatz zu dem entsprechenden Parameter etwa bei der <b>DLookup<\/b>-Funktion um einen Pflichtparameter. Die Bedingung darf nur genau einen Datensatz zur&uuml;ckliefern!<\/li>\n<\/ul>\n<p>Ein Aufruf k&ouml;nnte etwa wie folgt aussehen:<\/p>\n<pre>  Application.ColumnHistory(\"tblMemofeld\", \"Inhalt\", \"ID = 1\")\r\n[Version: 28.08.2019 11:34:20 ] Beispieltext.\r\n[Version: 28.08.2019 11:34:48 ] Beispieltext. Noch mehr Beispieltext.<\/pre>\n<h2>Wann wird der Versionsstand gespeichert<\/h2>\n<p>Das Hinzuf&uuml;gen eines neuen Versionsstandes erfolgt erst, wenn der Benutzer den Datensatz speichert. Das Verlassen des Feldes und somit der Fokusverlust reicht nicht aus.<\/p>\n<h2>Auf einzelne Eintr&auml;ge zugreifen<\/h2>\n<p>Damit k&ouml;nnen wir nun noch nicht auf die einzelnen Versionsst&auml;nde des Textes des Memofelds zugreifen, was aber n&ouml;tig ist, um komfortabel zwischen den verf&uuml;gbaren Versionsst&auml;nden hin- und herzuschalten.<\/p>\n<p>Um dies zu realisieren, erstellen wir zun&auml;chst ein neues Formular, das &uuml;ber die Eigenschaft <b>Datensatzquelle<\/b> an die Tabelle <b>tblMemofeld <\/b>gebunden ist. Wir ziehen alle Felder aus der Feldliste in den Entwurf des Formulars.<\/p>\n<p>Dann f&uuml;gen wir drei Steuer-elemente zum Formular hinzu, die wir wie in Bild 6 neben dem Textfeld f&uuml;r das Memofeld platzieren. Die beiden Schaltfl&auml;chen hei&szlig;en <b>cmdVorheriger <\/b>und <b>cmdNaechster<\/b>. Das Textfeld soll die Bezeichnung <b>txtVersion <\/b>erhalten. Au&szlig;erdem stellen wir die Eigenschaft <b>Aktiviert <\/b>auf <b>Nein <\/b>und <b>Gesperrt <\/b>auf <b>Ja <\/b>ein &#8211; so wird der Inhalt weiterhin angezeigt, kann aber vom Benutzer nicht ge&auml;ndert werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_006.png\" alt=\"Steuer-elemente zum Navigieren in den Versionen\" width=\"499,6607\" height=\"299,7964\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Steuer-elemente zum Navigieren in den Versionen<\/span><\/b><\/p>\n<p>F&uuml;r die nachfolgend hinzuzuf&uuml;genden Prozeduren ben&ouml;tigen wir zwei allgemein deklarierte Variablen, die Sie wie folgt zum Klassenmodul des Formulars <b>frmMemofelder <\/b>hinzuf&uuml;gen:<\/p>\n<pre>DDim colVersions<span style=\"color:blue;\"> As <\/span>Collection\r\n<span style=\"color:blue;\">Dim <\/span>lngVersion<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Die Variable <b>colVersions <\/b>soll eine Collection aufnehmen, die wir mit den Texten der verschiedenen Versionen des Memofeldes f&uuml;llen.<\/p>\n<h2>Versionsst&auml;nde ermitteln und in Collection eintragen<\/h2>\n<p>Dies erledigen wir zu verschiedenen Gelegenheiten. Wichtig ist zun&auml;chst, dass wir die Prozedur erstellen, mit der die verschiedenen Versionsst&auml;nde des Inhalts des Memofeldes f&uuml;r den aktuellen Datensatz ermittelt und in das <b>Collection<\/b>-Objekt eingetragen werden k&ouml;nnen. Diese Prozedur finden Sie in Listing 1. Sie deklariert zun&auml;chst einige Variablen und initialisiert dann die Objektvariable <b>colVersions <\/b>des Typs <b>Collection<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>VersionAktualisieren()\r\n     <span style=\"color:blue;\">Dim <\/span>strVersions<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngPosStart<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngPosEnde<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strVersion<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> colVersions = <span style=\"color:blue;\">New<\/span> Collection\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!ID)<span style=\"color:blue;\"> Then<\/span>\r\n         strVersions = Application.ColumnHistory(\"tblMemofeld\", \"Inhalt\", \"ID = \" & Me!ID)\r\n         lngPosStart = <span style=\"color:blue;\">InStr<\/span>(1, strVersions, \"[Version: \")\r\n         <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> lngPosStart = 0 And <span style=\"color:blue;\">Not<\/span> lngPosStart = <span style=\"color:blue;\">Len<\/span>(strVersions) + 3\r\n             lngPosEnde = <span style=\"color:blue;\">InStr<\/span>(lngPosStart, strVersions, \" ] \")\r\n             lngPosStart = <span style=\"color:blue;\">InStr<\/span>(lngPosEnde, strVersions, \"[Version: \")\r\n             <span style=\"color:blue;\">If <\/span>lngPosStart = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 lngPosStart = <span style=\"color:blue;\">Len<\/span>(strVersions) + 3\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             strVersion = <span style=\"color:blue;\">Mid<\/span>(strVersions, lngPosEnde + 3, lngPosStart - lngPosEnde - 5)\r\n             colVersions.Add (strVersion)\r\n         <span style=\"color:blue;\">Loop<\/span>\r\n         lngVersion = colVersions.Count - 1\r\n         <span style=\"color:blue;\">If <\/span>lngVersion = -1<span style=\"color:blue;\"> Then<\/span>\r\n             lngVersion = 0\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         lngVersion = 0\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     SchaltflaechenAktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Aktualisieren der Version<\/span><\/b><\/p>\n<p>Die Prozedur pr&uuml;ft mit <b>Not IsNull(Me!ID) <\/b>zuerst, ob das Prim&auml;rschl&uuml;sselfeld einen Wert ungleich <b>Null <\/b>enth&auml;lt und somit, ob das Formular einen g&uuml;ltigen Datensatz anzeigt. Falls nicht, wird lediglich der Wert der Variablen <b>lngVersion <\/b>auf den Wert <b>0 <\/b>eingestellt. Das ist beispielsweise der Fall, wenn das Formular einen neuen, leeren Datentsatz anzeigt.<\/p>\n<p>Liegt jedoch bereits ein Datensatz vor, lesen wir den kompletten Inhalt des Memofeldes in die Variable <b>strVersions <\/b>ein. Dazu nutzen wir die Methode <b>ColumnHistory<\/b>, die wir bereits weiter oben vorgestellt haben.<\/p>\n<p>Die folgende Anweisung ermittelt die Position des ersten Auftretens der Zeichenkette <b>[Version: <\/b>und speichert den Zahlenwert in der Variablen <b>lngPosStart<\/b>.<\/p>\n<p>Hat <b>lngPosStart <\/b>danach einen Wert ungleich <b>0 <\/b>und entspricht es nicht der L&auml;nge der gesamten in <b>strVersions <\/b>gespeicherten Zeichenkette plus drei (Erl&auml;uterung dazu weiter unten), folgen weitere Schritte. So ermittelt die Prozedur f&uuml;r die Variable <b>lngPosEnde <\/b>die Position der schlie&szlig;enden eckigen Klammer. Unmittelbar danach wird wieder die Position des n&auml;chsten Vorkommens von <b>[Version: <\/b>in die Variable <b>lngPosStart <\/b>eingetragen.<\/p>\n<p>Hat <b>lngPosStart <\/b>an dieser Stelle den Wert <b>0<\/b>, was bedeutet, dass keine weiteren Vorkommen mehr gefunden werden konnten, stellen wir den Wert von <b>lngPosStart <\/b>auf den Wert der L&auml;nge von <b>strVersion <\/b>plus drei ein.<\/p>\n<p>Nun wissen wir, an welcher Stelle sich der eigentliche Text der aktuellen Version des Memofeldes befindet. Diesen Text lesen wir dann mit der <b>Mid<\/b>-Funktion mit den entsprechenden Zahlenangaben in die Variable <b>strVersion <\/b>ein und f&uuml;gen den Inhalt mit der <b>Add<\/b>-Methode zur <b>Collection<\/b>-Variablen <b>colVersions <\/b>hinzu.<\/p>\n<p>Dies wiederholen wir in der <b>Do While<\/b>-Schleife solange, bis entweder <b>lngPosStart <\/b>den Wert <b>0<\/b> aufweist, was nur beim ersten Durchlauf der Schleife passieren kann, oder bis <b>lngPosStart <\/b>der L&auml;nge des Textes aus <b>strVersion <\/b>plus drei entspricht &#8211; diese Abbruchbedingung wird innerhalb der Schleife hergestellt, wenn kein weiteres Vorkommen von <b>[Version: <\/b>mehr gefunden werden kann.<\/p>\n<p>Nach dem Durchlaufen der Schleife stellt die Prozedur den Wert der Variablen <b>lngVersion <\/b>auf die Anzahl der Eintr&auml;ge der Collection minus eins ein. Lautet dieser Wert dann <b>-1<\/b>, weil die Collection keine Eintr&auml;ge enth&auml;lt, weist die Prozedur <b>lngVersion <\/b>den Wert <b>0 <\/b>zu. Schlie&szlig;lich ruft die Prozedur noch eine weitere Prozedur namens <b>SchaltflaechenAktivieren <\/b>auf.<\/p>\n<h2>Schaltfl&auml;chen aktivieren und deaktivieren<\/h2>\n<p>Die Prozedur <b>SchaltflaechenAktivieren <\/b>stellt die Eigenschaft <b>Enabled <\/b>der Schaltfl&auml;che <b>cmdVorheriger <\/b>auf den Wert <b>True <\/b>ein, wenn <b>lngVersion <\/b>nicht den Wert <b>0 <\/b>enth&auml;lt &#8211; die Schaltfl&auml;che wird also nur deaktiviert, wenn nicht gerade die erste Version angezeigt wird.<\/p>\n<p>Wenn die Collection leer ist und die Eigenschaft <b>Count <\/b>somit den Wert <b>0 <\/b>zur&uuml;ckliefert, stellen wir die Variable <b>lngVersionCount <\/b>auf <b>1 <\/b>ein, anderenfalls auf den jeweiligen Wert von <b>colVersions.Count<\/b>. Danach aktivieren oder deaktivieren wir die Schaltfl&auml;che <b>cmdNaechster <\/b>in Abh&auml;ngigkeit davon, ob aktuell der Inhalt der letzten Version der Collection angezeigt wird. Das Textfeld <b>txtVersion <\/b>soll schlie&szlig;lich den Index der aktuellen Version anzeigen. Wenn es vier Versionen gibt und der Datensatz wird gerade ge&ouml;ffnet, soll hier etwa <b>4\/4 <\/b>stehen und die Schaltfl&auml;che <b>cmdNaechster <\/b>soll deaktiviert sein.<\/p>\n<p>Klickt der Benutzer dann auf die Schaltfl&auml;che <b>cmdVorheriger<\/b>, soll die vorherige Version angezeigt werden, das Textfeld <b>txtVersion <\/b>zeigt <b>3\/4 <\/b>an und die Schaltfl&auml;che <b>cmdNaechster <\/b>wird aktiviert.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>SchaltflaechenAktivieren()\r\n     <span style=\"color:blue;\">Dim <\/span>lngVersionCount<span style=\"color:blue;\"> As Long<\/span>\r\n     Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">Not<\/span> lngVersion = 0\r\n     <span style=\"color:blue;\">If <\/span>colVersions.Count = 0<span style=\"color:blue;\"> Then<\/span>\r\n         lngVersionCount = 1\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         lngVersionCount = colVersions.Count\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     Me!cmdNaechster.Enabled = <span style=\"color:blue;\">Not<\/span> lngVersion =  lngVersionCount - 1\r\n     Me!txtVersion = lngVersion + 1 & \"\/\" & lngVersionCount\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das alles n&uuml;tzt uns gar nichts, wenn wir die Prozedur <b>VersionAktualisieren<\/b> nicht aufrufen. Wann soll das geschehen<\/p>\n<ul>\n<li>Bei jedem Anzeigen eines Datensatzes, also in der Prozedur <b>Form_Current<\/b>, die durch das Ereignis <b>Beim Anzeigen <\/b>ausgel&ouml;st wird.<\/li>\n<li>Nach dem Aktualisieren des aktuellen Datensatzes, also in der durch das Ereignis <b>Nach Aktualisierung <\/b>ausgel&ouml;sten Prozedur.<\/li>\n<li>Beim Verwerfen der &Auml;nderungen am aktuellen Datensatz, also beim Ereignis <b>Bei R&uuml;ckg&auml;ngig <\/b>des Formulars.<\/li>\n<\/ul>\n<p>Die entsprechenden Ereignisprozeduren sehen wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     VersionAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     VersionAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Form_Undo(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     VersionAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Au&szlig;erdem ben&ouml;tigen wir noch die beiden Prozeduren, die durch die Schaltfl&auml;chen <b>cmdVorheriger <\/b>und <b>cmdNaechster <\/b>ausgel&ouml;st werden. Die Prozedur <b>cmdVorheriger_Click <\/b>vermindert <b>lngVersion <\/b>um eins und schreibt den Inhalt der Collection <b>colVersions <\/b>f&uuml;r den entsprechenden Index in das Textfeld <b>Inhalt<\/b>. Danach ruft es die Prozedur <b>SchaltflaechenAktivieren <\/b>auf:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVorheriger_Click()\r\n     lngVersion = lngVersion - 1\r\n     Me!Inhalt = colVersions(lngVersion + 1)\r\n     SchaltflaechenAktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur <b>cmdNaechster_Click <\/b>erledigt das in der anderen Richtung, sie erh&ouml;ht also <b>lngVersion <\/b>um eins:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNaechster_Click()\r\n     lngVersion = lngVersion + 1\r\n     Me!Inhalt = colVersions(lngVersion + 1)\r\n     SchaltflaechenAktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Verhalten der L&ouml;sung<\/h2>\n<p>Damit erhalten Sie ein Formular in der Formularansicht wie in Bild 7. Hier haben wir einen neuen Datensatz angelegt und einen Beispieltext in das Memo-Textfeld geschrieben. Dass der Datensatz noch nicht gespeichert ist, erkennen Sie am <b>Bearbeiten<\/b>-Symbol im Datensatzmarkierer-Bereich.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_007.png\" alt=\"Eingabe des ersten Textes\" width=\"424,7115\" height=\"205,2773\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Eingabe des ersten Textes<\/span><\/b><\/p>\n<p>Wenn Sie den Datensatz nun etwa durch einen Klick auf den Datensatzmarkierer speichern, geschieht nichts weiter &#8211; au&szlig;er, dass das Bearbeiten-Symbol verschwindet. Nun geben wir weiteren Text in das Memo-Textfeld ein und &auml;ndern so seinen Inhalt. Dies &auml;ndert zun&auml;chst nichts an der Anzeige unserer Steuer-elemente zum Verwalten der Historie des Memofeldes &#8211; lediglich das Bearbeiten-Symbol erscheint wieder im <b>Datensatzmarkierer<\/b>-Bereich. Wenn wir den Datensatzmarkierer nun erneut anklicken, werden die Steuer-elemente aktualisiert: Das Textfeld <b>txtVersion <\/b>zeigt nun <b>2\/2 <\/b>statt <b>1\/1 <\/b>an und die Schaltfl&auml;che <b>cmdVorheriger <\/b>wird aktiviert (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_008.png\" alt=\"Eingabe des zweiten Textes\" width=\"424,7115\" height=\"205,2773\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Eingabe des zweiten Textes<\/span><\/b><\/p>\n<h2>Vorsicht beim Versionswechsel<\/h2>\n<p>Wenn Sie nun auf die Schaltfl&auml;che <b>cmdVorheriger <\/b>klicken, zeigt das Formular im Textfeld <b>txtVersion <\/b>den Ausdruck <b>1\/2 <\/b>an. Die Schaltfl&auml;che <b>cmdVorheriger <\/b>wird deaktiviert, weil der erste Eintrag der Historie erreicht wurde und <b>cmdNaechster <\/b>wird aktiviert. Au&szlig;erdem zeigt das Memo-Textfeld den vorherigen Versionsstand an.<\/p>\n<p>Gleichzeitig erscheint auch wieder das Bearbeiten-Symbol im Datensatzmarkierer-Bereich (siehe Bild 9). Das bedeutett, dass wenn Sie den Datensatz nun speichern, eine dritte Version des Textes des Memofelds angelegt wird, die wieder dem Inhalt der ersten Version entspricht. Es wird also die jeweils beim Speichern des Datensatzes vorhandene Version als neue Version in die Historie des Memofeldes &uuml;bernommen. Wenn Sie sich dar&uuml;ber bewusst sind, steht der Nutzung der hier vorgestellten L&ouml;sung nichts mehr im Weg.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_05\/pic_1205_009.png\" alt=\"Wechseln zur ersten Version\" width=\"424,7115\" height=\"205,2773\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Wechseln zur ersten Version<\/span><\/b><\/p>\n<h2>Zur&uuml;cksetzen der Versionshistorie<\/h2>\n<p>Ein Zur&uuml;cksetzen der gespeicherten Versionen ist nicht vorgesehen. Das hei&szlig;t, es ist nur mit gro&szlig;em Aufwand m&ouml;glich. Die M&ouml;glichkeiten lauten:<\/p>\n<ul>\n<li>L&ouml;schen und Neuerstellen des Datensatzes mit vorherigem Kopieren und anschlie&szlig;endem Wiedereinf&uuml;gen der zu erhaltenden Inhalte (f&uuml;r den aktuellen Datensatz) oder<\/li>\n<li>Wechsel in die Entwurfsansicht der Tabelle, &auml;ndern der Eigenschaft <b>Nur anf&uuml;gen <\/b>auf <b>Nein<\/b>, speichern der Tabelle, &auml;ndern der Eigenschaft zur&uuml;ck auf <b>Ja <\/b>und erneutes Speichern der Tabelle. Dies l&ouml;scht die Historie f&uuml;r alle Datens&auml;tze. Es bleibt dann nur der aktuelle Inhalt des Memofelds erhalten.<\/li>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>RuckgaengigInMemofeldern.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/40BADBF9-D993-4ADC-9E98-D15D74563431\/aiu_1205.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit Access 2007 bietet Access f&uuml;r Memofelder die M&ouml;glichkeit, die verschiedenen Versionen zu speichern. Wie aber k&ouml;nnen wir solche &Auml;nderungen wieder r&uuml;ckg&auml;ngig machen, ohne dass der Benutzer die eingebauten Funktionen daf&uuml;r nutzen muss oder gar ein extra Formular, dass die bisher gespeicherten Versionen anzeigt Sondern einfach etwa mit zwei Schaltfl&auml;chen, mit denen er zwischen den vorhandenen History-Eintr&auml;gen hin- und herbl&auml;ttern kann Wie das gelingt, zeigen wir in diesem 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":[662019,66052019,44000023],"tags":[],"class_list":["post-55001205","post","type-post","status-publish","format-standard","hentry","category-662019","category-66052019","category-Mit_Formularen_arbeiten"],"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>R&uuml;ckg&auml;ngig in Memofeldern - Access im Unternehmen<\/title>\n<meta name=\"description\" content=\"testtest\" \/>\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\/Rueckgaengig_in_Memofeldern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R&uuml;ckg&auml;ngig in Memofeldern\" \/>\n<meta property=\"og:description\" content=\"testtest\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T20:56:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23\" \/>\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\\\/Rueckgaengig_in_Memofeldern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"R&uuml;ckg&auml;ngig in Memofeldern\",\"datePublished\":\"2020-05-13T20:56:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/\"},\"wordCount\":1888,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/dcf8c53991d840a2a0d4a997d00d7f23\",\"articleSection\":[\"2019\",\"5\\\/2019\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/\",\"name\":\"R&uuml;ckg&auml;ngig in Memofeldern - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/dcf8c53991d840a2a0d4a997d00d7f23\",\"datePublished\":\"2020-05-13T20:56:26+00:00\",\"description\":\"testtest\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/dcf8c53991d840a2a0d4a997d00d7f23\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/dcf8c53991d840a2a0d4a997d00d7f23\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rueckgaengig_in_Memofeldern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"R&uuml;ckg&auml;ngig in Memofeldern\"}]},{\"@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":"R&uuml;ckg&auml;ngig in Memofeldern - Access im Unternehmen","description":"testtest","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\/Rueckgaengig_in_Memofeldern\/","og_locale":"de_DE","og_type":"article","og_title":"R&uuml;ckg&auml;ngig in Memofeldern","og_description":"testtest","og_url":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T20:56:26+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23","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\/Rueckgaengig_in_Memofeldern\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"R&uuml;ckg&auml;ngig in Memofeldern","datePublished":"2020-05-13T20:56:26+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/"},"wordCount":1888,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23","articleSection":["2019","5\/2019","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/","url":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/","name":"R&uuml;ckg&auml;ngig in Memofeldern - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23","datePublished":"2020-05-13T20:56:26+00:00","description":"testtest","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/dcf8c53991d840a2a0d4a997d00d7f23"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Rueckgaengig_in_Memofeldern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"R&uuml;ckg&auml;ngig in Memofeldern"}]},{"@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\/55001205","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=55001205"}],"version-history":[{"count":1,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001205\/revisions"}],"predecessor-version":[{"id":77001501,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001205\/revisions\/77001501"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}