{"id":55000575,"date":"2008-04-01T00:00:00","date_gmt":"2021-02-11T21:19:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=575"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Zuletzt_verwendete_Datensaetze_anzeigen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/","title":{"rendered":"Zuletzt verwendete Datens&auml;tze anzeigen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Sie kennen sicherlich die Funktion aus dem Office-Ppaket, die Ihnen immer die letzten verwendeten Dokumente im Men&uuml; anbietet. Diese Funktionalit&auml;t hat den charmanten Vorteil, dass Sie diese Dateien nicht in der Verzeichnisstruktur Ihrer Festplatte suchen m&uuml;ssen, sondern direkt darauf zugreifen k&ouml;nnen. Dieses Prinzip namens Most Recent Used (MRU) soll im nachfolgenden Programmierbeispiel f&uuml;r Kundendaten verwendet werden.<\/b><\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Das Fallbeispiel<\/p>\n<p>In der Beispieldatenbank <b>MRU2000.mdb <\/b>finden Sie alle in diesem Artikel beschriebenen Objekte und Codierungen. &Ouml;ffnen Sie in der Beispieldatenbank das Formular <b>frmStammdaten<\/b>, &uuml;ber das Sie Firmendaten verwalten k&ouml;nnen (siehe Bild 1). Links von den eigentlichen Daten befindet sich ein Listenfeld, in dem alle Datens&auml;tze angezeigt werden, die &uuml;ber <b>Suchen <\/b>ermittelt wurden oder an deren Stammdaten &auml;nderungen vorgenommen worden sind.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MRU-web-images\/Bild284_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Verwaltungsformular f&uuml;r Unternehmensdaten<\/span><\/b><\/p>\n<p>Geben Sie in das Textfeld <b>Suchen <\/b>einen beliebigen Suchbegriff f&uuml;r ein Unternehmen ein. Als Platzhalter f&uuml;r eine beliebige Zeichenkette kann das Sternchen (*) verwendet werden. Sobald Sie den zu suchenden Begriff eingegeben haben, best&auml;tigen Sie den Eintrag mit der Eingabetaste und anschlie&szlig;end &ouml;ffnet sich ein Dialog, in dem alle dem Suchmuster entsprechenden Unternehmen angezeigt werden (siehe Bild 2). Um zum gew&uuml;nschten Datensatz zu navigieren, klicken Sie entweder doppelt auf den Namen im Listenfeld oder Sie markieren den Datensatz und best&auml;tigen anschlie&szlig;end Ihre Auswahl mit <b>Ausw&auml;hlen<\/b>. Sobald der Dialog geschlossen wird und das aufrufende Formular zum ausgew&auml;hlten Datensatz navigiert, erscheint der von Ihnen ausgew&auml;hlte Datensatz in der Liste der zuletzt verwendeten Datens&auml;tze und Sie m&uuml;ssen nun nicht mehr m&uuml;hsam &uuml;ber den Suchdialog zu diesem Datensatz navigieren.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MRU-web-images\/Bild297_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Dem Suchkriterium entsprechende Datens&auml;tze<\/span><\/b><\/p>\n<p>Eine weitere M&ouml;glichkeit der &Uuml;bernahme eines Datensatzes in die <b>MRU <\/b>besteht darin, einen existierenden Datensatz zu &auml;ndern. Sobald die &auml;nderungen an einem Datensatz gespeichert wurden, wird dieser Datensatz ebenfalls in die <b>MRU <\/b>&uuml;bernommen.<\/p>\n<p><b>Technische Umsetzung<\/b><\/p>\n<p>Um eine MRU zu programmieren, bedarf es nicht viel Aufwands. Auf Basis der Datenstruktur ben&ouml;tigen Sie zwei Tabellen zur Steuerung der MRU.<\/p>\n<p><b>tblMRU<\/b><\/p>\n<p>Die wichtigste Tabelle f&uuml;r die Speicherung der letzten Datens&auml;tze ist die Tabelle <b>tblMRU<\/b>. Ihre Aufgabe ist es, den Prim&auml;rschl&uuml;ssel der Unternehmensdaten nebst Datum des Eintrags zu speichern (s. Tab. 1).<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Feld<\/p>\n<\/td>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 1: Aufbau der Tabelle tblMRU<\/span><\/b><\/p>\n<p>Sobald ein neuer Eintrag in der Tabelle vorgenommen wird, wird das Datum automatisch durch Access hinzugef&uuml;gt.<\/p>\n<p><b>tblMRUParameter<\/b><\/p>\n<p>Die Tabelle <b>tblMRUParameter <\/b>dient der Verwaltung der Steuerungsvariablen f&uuml;r die Verwaltung der MRU. Auch diese Tabelle (s. Tab. 2) hat einen recht simplen Aufbau und speichert ausschlie&szlig;lich einen Parameternamen sowie einen Parameterwert.<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Feld<\/p>\n<\/td>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Beschreibung<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 2: Aufbau der Tabelle tblMRUParameter<\/span><\/b><\/p>\n<p>F&uuml;r das obige Beispiel ben&ouml;tigen Sie nur einen einzigen Parameter, der steuert, wie viele Eintr&auml;ge maximal in der MRU gespeichert werden sollen. Dazu dient der Parameter <b>MAX_ENTRIES<\/b>, der aktuell auf den Wert <b>25 <\/b>festgelegt ist.<\/p>\n<p>Es w&auml;re auch m&ouml;glich, ein Verfallsdatum zu verwenden, indem man die Tage angibt, nach denen ein Eintrag automatisch aus der MRU entfernt werden soll. <\/p>\n<p><b>Eine Klasse f&uuml;r die Kapselung der Funktion<\/b><\/p>\n<p>Die Funktionen der MRU sind in einer Klasse gekapselt, was so eine einfachere Verwaltung und Weiterentwicklung erm&ouml;glicht.<\/p>\n<p>Die erste Grund&uuml;berlegung f&uuml;r die Funktion ist nat&uuml;rlich der Leistungsumfang. Sie m&uuml;ssen zun&auml;chst festlegen, was die Klasse alles leisten soll. Grunds&auml;tzlich m&uuml;ssen die Funktionen aus Tab. 3 erf&uuml;llt sein.<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Funktionalit&auml;t<\/p>\n<\/td>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Funktion<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 3: Basisfunktionalit&auml;t der MRU<\/span><\/b><\/p>\n<p>Neben den oben aufgef&uuml;hrten &ouml;ffentlich zug&auml;nglichen Methoden der Klasse werden nat&uuml;rlich auch Hilfsfunktionen ben&ouml;tigt, die Grundfunktionen der Klasse steuern (s. Tab. 4).<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Funktionalit&auml;t<\/p>\n<\/td>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Funktion<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 4: Hilfsfunktionen der MRU<\/span><\/b><\/p>\n<p><b>Aufbau der Klasse clsMRU<\/b><\/p>\n<p>Die oben beschriebene Funktionalit&auml;t ist in der Klasse <b>clsMRU <\/b>programmiert. Sie befindet sich in der Beispieldatenbank und kann durch einen Doppelklick im Visual Basis Editor angezeigt und bearbeitet werden.<\/p>\n<p>F&uuml;r die korrekte Arbeitsweise der Klasse werden Parameter eingesetzt. Damit diese Parameter nicht in jeder Funktion erneut abgerufen werden, speichert die Klasse die Parameterwerte in lokalen Variablen und Konstanten, die w&auml;hrend des gesamten Lebenszyklus der Klasse zur Verf&uuml;gung stehen. Es bietet sich also an, die Parameter f&uuml;r den Gebrauch gleich bei der Initialisierung der Datenklasse auszulesen und zu speichern.<\/p>\n<p>Um Code gleich bei der Initialisierung einer Klasse ausf&uuml;hren zu lassen, verwenden Sie das Ereignis <b>Initialize <\/b>des Klassenobjektes. Es wird automatisch ausgef&uuml;hrt, sobald Sie auf Methoden und Eigenschaften einer Klasse zum ersten Mal zugreifen. In diesem Beispiel ist die Initialisierung nicht sehr aufw&auml;ndig, da lediglich die lokale Variable <b>lngNumOfEntries <\/b>gef&uuml;llt wird. Sie speichert den Wert der maximal zu speichernden Eintr&auml;ge in die MRU:<\/p>\n<pre>Private Sub Class_Initialize()\r\n    lngNumOfEntries = _\r\n    GetParameterValue(&quot;MAX_ENTRIES&quot;)\r\n    End Sub<\/pre>\n<p>Der Wert der Variablen wird durch die Funktion <b>GetParameterValue <\/b>gesetzt. Diese Funktion liest aus der Tabelle <b>tblMRUParameter <\/b>den Wert zum entsprechenden Parameterdatensatz aus.<\/p>\n<pre>Private Function GetParameterValue(strParameter _\r\n    As String) As Variant\r\n    ...\r\n    Set cmd = New ADODB.Command\r\n    With cmd\r\n    Set .ActiveConnection = _\r\n    CurrentProject.Connection\r\n    .CommandText = SQL_MRU_PARAMETER\r\n    .CommandType = adCmdText\r\n    Set prm = .CreateParameter(&quot;Parameter&quot;, _\r\n    adVarChar, adParamInput, _\r\n    Len(strParameter) + 1, strParameter)\r\n    .Parameters.Append prm\r\n    Set rst = .Execute()\r\n    End With\r\n    If Not rst Is Nothing Then\r\n        If Not rst.EOF And rst.BOF Then\r\n            GetParameterValue = _\r\n            rst.Fields(0).Value\r\n        End If\r\n    End If\r\n    ...\r\nEnd Function<\/pre>\n<p><!--30percent--><\/p>\n<p>Da diese Funktion lediglich innerhalb der Klasse ben&ouml;tigt wird, ist sie als <b>Private <\/b>deklariert und somit nach au&szlig;en nicht sichtbar. Der Zugriff auf die Datenstrukturen der Tabellen erfolgt &uuml;ber ADO und OLEDB, aber selbstverst&auml;ndlich k&ouml;nnen Sie auch mittels DAO die gleiche Funktionalit&auml;t erreichen. Das Ergebnis der Abfrage wird in einem ADO-RecordSet <b>rst <\/b>gespeichert und kann anschlie&szlig;end f&uuml;r die weitere Bearbeitung verwendet werden.<\/p>\n<pre>If Not rst Is Nothing Then\r\n    If Not rst.EOF And rst.BOF Then\r\n        GetParameterValue = rst.Fields(0).Value\r\n    End If\r\nEnd If<\/pre>\n<p>Sollte kein Eintrag gefunden werden, erhalten Sie einen NULL-Wert.<\/p>\n<p><b>Variablen oder Properties<\/b><\/p>\n<p>Wenn Sie sich die Klasse <b>clsMRU <\/b>etwas genauer anschauen, werden Sie bemerken, dass es in dieser Klasse zwei Properties (<b>TableName <\/b>und <b>PrimaryKey<\/b>) gibt. Mithilfe von Properties (Klasseneigenschaften) k&ouml;nnen Sie au&szlig;erhalb der Klasse Werte f&uuml;r den Gebrauch der Klasse setzen. Sie k&ouml;nnen aber auch mithilfe von Properties Werte aus einer Klasse auslesen. Beides ist nur dann m&ouml;glich, wenn Sie eine &ouml;ffentliche <b>Property<\/b>-Eigenschaft deklarieren.<\/p>\n<p>&#8222;Warum denn eine Property Eine Variable innerhalb einer Klasse, die als <b>Public <\/b>deklariert wird, erf&uuml;llt doch die gleiche Funktion.&#8220; Das stimmt vollkommen, jedoch haben Variablen eine kleine Einschr&auml;nkung &#8211; Sie k&ouml;nnen einer Variablen einen Wert zuweisen oder einen Wert abrufen. Sie haben dann jedoch keine M&ouml;glichkeit, innerhalb der Klasse etwa die Plausibilit&auml;t der Zuweisung zu pr&uuml;fen. Genau das aber ist der gro&szlig;e Vorteil von Properties, weil sie gleichzeitig Prozeduren sind. Um einer Property einen Wert zuzuweisen, verwenden Sie das Schl&uuml;sselwort <b>Let, <\/b>und um den Wert einer Eigenschaft abzurufen, das Schl&uuml;sselwort <b>Get<\/b>.<\/p>\n<p>Als Beispiel f&uuml;r die Vorteile von Eigenschaften soll die Eigenschaft <b>Tablename <\/b>dienen. Der Code f&uuml;r die Zuweisung eines Wertes durch <b>Property Let <\/b>wird hierzu ein wenig genauer unter die Lupe genommen. Wenn der Anwender einen Tabellennamen f&uuml;r die Klasse bestimmt, soll der Wert nicht einfach &uuml;bernommen werden, sondern es soll &uuml;berpr&uuml;ft werden, ob das Objekt auch tats&auml;chlich in der Datenbank enthalten ist.<\/p>\n<pre>Public Property Let TableName(TName As String)\r\nOn Error GoTo ErrorHandler\r\nFor Each tdef In DBEngine(0)(0).TableDefs\r\n If tdef.Name = TName Then\r\n    strTableName = TName\r\n    Exit For\r\nEnd If\r\nNext tdef\r\nExitCode:\r\nOn Error Resume Next\r\nSet tdef = Nothing\r\nExit Property\r\nErrorHandler:\r\nMsgBox &quot;Die Tabelle &quot; &amp; TName _\r\n&amp; &quot; ist nicht in der Datenbank &quot; _\r\n&amp; &quot;enthalten&quot;, vbInformation\r\nResume ExitCode\r\nEnd Property<\/pre>\n<p>Innerhalb einer <b>For&#8230;Next<\/b>-Schleife werden die Tabellenobjekte in Ihrer Anwendung &uuml;berpr&uuml;ft. Sollte eine Tabelle mit dem von Ihnen angegebenen Namen existieren, wird die Variable <b>strTableName <\/b>gesetzt und die Schleife wird verlassen.<\/p>\n<p><b>AddEntry<\/b><\/p>\n<p>Um der MRU einen Eintrag hinzuzuf&uuml;gen, verwenden Sie die Methode <b>AddEntry<\/b>. Die Methode <b>AddEntry <\/b>ben&ouml;tigt als &Uuml;bergabeparameter die eindeutige Kennung des Datensatzes (<b>Sid<\/b>) und versucht, diesen Datensatz in die Tabelle <b>tblMRU <\/b>einzutragen. Sollte der Eintrag fehlschlagen, weil ein entsprechender Eintrag bereits vorhanden ist, wird die Methode ohne Fehlermeldung verlassen.<\/p>\n<p>Ansonsten liefert die Methode als R&uuml;ckgabewert den Erfolg des Eintrags in Form eines Bool&#8220;schen Werts (<b>True<\/b>\/<b>False<\/b>). Die Methode <b>AddEntry <\/b>arbeitet ebenfalls mit ADO und verwendet als Befehlsanweisung eine Konstante, die den SQL-Befehl beinhaltet. Die Befehlsfolge finden Sie in der Konstanten <b>SQL_MRU_ADDENTRY<\/b>.<\/p>\n<pre>Public Function AddEntry(SId As Long) As Boolean\r\nOn Error GoTo ErrorHandler\r\nIf lngNumOfEntries &gt; 0 Then\r\n Call fn_app_ReorgMRUList(lngNumOfEntries)\r\nEnd If\r\nSet cmd = New ADODB.Command\r\nWith cmd\r\nSet .ActiveConnection = _\r\nCurrentProject.Connection\r\n.CommandText = SQL_MRU_ADDENTRY\r\n.CommandType = adCmdText\r\nSet prm = .CreateParameter(&quot;TableName&quot;, _\r\nadVarChar, adParamInput, _\r\nLen(strTableName) + 1, strTableName)\r\n.Parameters.Append prm\r\nSet prm = .CreateParameter( _\r\n&quot;PrimaryKey&quot;, adVarChar, _\r\nadParamInput, _\r\nLen(strPrimaryKey) + 1, _\r\nstrPrimaryKey)\r\n.Parameters.Append prm\r\nSet prm = .CreateParameter(&quot;SId&quot;, _\r\nadInteger, adParamInput, , SId)\r\n.Parameters.Append prm\r\n.Execute\r\nEnd With\r\nAddEntry = True\r\nExitCode:\r\nOn Error Resume Next\r\nSet prm = Nothing\r\nSet cmd = Nothing\r\nExit Function\r\nErrorHandler:\r\nSelect Case Err.Number\r\nCase MRU_ERR_ENTRYEXISTS\r\nAddEntry = UpdateEntry(SId)\r\nResume ExitCode\r\nCase Else: MsgBox Err.Description, _\r\nvbInformation, &quot;Fehler in MRU: &quot; _\r\n&amp; CStr(Err.Number)\r\nEnd Select\r\nResume ExitCode\r\nEnd Function<\/pre>\n<p>Eine besondere Fehlerbehandlung findet im Error-Handler statt. Sollte der von Ihnen gew&uuml;nschte Eintrag bereits in der MRU enthalten sein, wird beim Einf&uuml;gen eines Datensatzes eine Schl&uuml;sselverletzung ausgel&ouml;st. Diese Schl&uuml;sselverletzung (ADO-ErrorCode: -2147467259) wird &uuml;ber die vordefinierte Konstante <b>MRU_ERR_ENTRYEXISTS <\/b>abgefangen und es wird mit <b>UpdateEntry <\/b>darauf reagiert. Die Methode <b>UpdateEntry <\/b>ist privat und somit von au&szlig;en nicht sichtbar. Sie als Anwender m&uuml;ssen lediglich <b>AddEntry <\/b>ausf&uuml;hren und sich nicht mehr darum k&uuml;mmern, ob ein Eintrag bereits existiert!<\/p>\n<p><b>DeleteEntry<\/b><\/p>\n<p>So, wie Eintr&auml;ge der MRU hinzugef&uuml;gt werden, m&uuml;ssen solche Eintr&auml;ge auch wieder aus der Liste herausgel&ouml;scht werden. Dazu verwenden Sie die Methode <b>DeleteEntry<\/b>. Die Methode <b>DeleteEntry <\/b>besitzt den gleichen Aufbau und die gleiche Funktionsweise wie die Methode <b>AddEntry<\/b>. Lediglich der SQL-Befehl f&uuml;r das L&ouml;schen eines Eintrags unterscheidet sich von dem der Methode <b>AddEntry<\/b>. Der SQL-Befehl f&uuml;r das L&ouml;schen von Datens&auml;tzen aus der MRU befindet sich in der Konstanten <b>SQL_MRU_DELETEENTRY<\/b>.<\/p>\n<p><b>Reorganisation von veralteten Eintr&auml;gen<\/b><\/p>\n<p>Durch den Parameter <b>MAX_ENTRIES <\/b>legen Sie fest, wie viele Eintr&auml;ge maximal in der MRU gespeichert werden sollen. Sobald ein neuer Eintrag hinzugef&uuml;gt oder ein bestehender Eintrag aktualisiert wird, wird automatisch eine Reorganisation des Datenbestandes vorgenommen. Diese Aufgabe wird von der Methode <b>fn_app_ReorgMRUList <\/b>&uuml;bernommen. Damit diese Methode nach au&szlig;en nicht sichtbar ist, wird sie als <b>Private<\/b> deklariert (in einer Zeile): <\/p>\n<pre>Private Function fn_app_ReorgMRUList(NumOfEntries As Long)<\/pre>\n<p>Erw&auml;hnenswert bei dieser Funktion ist der auszuf&uuml;hrende SQL-Befehl. Da nur eine begrenzte Anzahl von Datens&auml;tzen in der MRU verbleiben soll, muss sichergestellt sein, dass immer die aktuellsten Datens&auml;tze in der Ergebnismenge verbleiben. Eine solche L&ouml;sung ist nur mittels Unterabfrage m&ouml;glich. Schauen wir uns zun&auml;chst einmal den kompletten SQL-Befehl an, wie er in der Konstanten <b>SQL_MRU_REORG <\/b>hinterlegt ist:<\/p>\n<pre>DELETE * FROM tblMRU WHERE SId NOT IN (SELECT TOP $Number SId FROM tblMRU ORDER BY InsertDate DESC).<\/pre>\n<p>Wie Sie gut erkennen k&ouml;nnen, bewirkt die Unterabfrage, die sich in den Klammern befindet, eine Filterung von Datens&auml;tzen, die nach dem Datum sortiert werden. Wenn also der Parameter <b>MAX_ENTRIES <\/b>auf <b>25 <\/b>festgelegt ist, ergibt das Ergebnis der Unterabfrage immer die 25 aktuellsten Datens&auml;tze aus der Tabelle <b>tblMRU<\/b>. Die eigentliche Aktionsabfrage (<b>DELETE * FROM tblMRU<\/b>) l&ouml;scht also alle Datens&auml;tze, die nicht der Ergebnismenge der Unterabfrage entsprechen.<\/p>\n<p>Beachten Sie bei dem SQL-Befehl, dass hier keine Parameter verwendet werden. Auch ist die <b>TOP<\/b>-Anweisung nicht mit einem Parameter initialisierbar. Parameter k&ouml;nnen nur in den Filterklauseln verwendet werden.<\/p>\n<p><b>Anwendung der Klasse clsMRU<\/b><\/p>\n<p>Die Programmierung der Klasse ist die aufw&auml;ndigste Arbeit. Nachdem die Klasse mit ihren Basismethoden erstellt wurde, kann sie nun zum Einsatz kommen. Zur Demonstration der verschiedenen Funktionen der Klasse dient das Formular <b>frmStammdaten<\/b>.<\/p>\n<p><b>Hinzuf&uuml;gen von MRU-Eintr&auml;gen bei &auml;nderung eines Datensatzes<\/b><\/p>\n<p>Wenn Sie die Daten eines Stammsatzes ver&auml;ndern, wird der Stammsatz automatisch der MRU hinzugef&uuml;gt.<\/p>\n<p>Um den Datensatz der MRU hinzuzuf&uuml;gen, verwenden Sie am besten das Ereignis <b>After Update <\/b>des Formulars. Damit stellen Sie sicher, dass der Eintrag erst nach der erfolgreichen Speicherung der Daten zur MRU hinzugef&uuml;gt wird.<\/p>\n<pre>Private Sub Form_AfterUpdate()\r\n    ...\r\n    Dim m As New clsMRU\r\n    Dim blnResult As Boolean\r\n    With m\r\n    .TableName = &quot;tblStammdaten&quot;\r\n    .PrimaryKey = &quot;SId&quot;\r\n    blnResult = .AddEntry(Me!SId)\r\n    If blnResult = True Then\r\n        Me!lstMRU.Requery\r\n    End If\r\n    End With\r\n    ...\r\n    End Sub<\/pre>\n<p>Zun&auml;chst erstellen Sie eine neue Instanz der Klasse <b>clsMRU<\/b>. Erst, wenn Sie das Klassenobjekt erstellt haben, k&ouml;nnen Sie auf die Methoden und Eigenschaften der Klasse zugreifen.<\/p>\n<p>Damit die Methode <b>AddEntry <\/b>verwendet werden kann, m&uuml;ssen die Eigenschaften f&uuml;r Tabellenname und Prim&auml;rschl&uuml;ssel bestimmt werden. Dies geschieht durch Zuweisung dieser Werte an die Eigenschaften <b>TableName <\/b>und <b>PrimaryKey<\/b>.<\/p>\n<p>Anschlie&szlig;end wird die Methode <b>AddEntry <\/b>verwendet, um den Datensatz der MRU hinzuzuf&uuml;gen. Wenn der Datensatz erfolgreich eingef&uuml;gt worden ist, wird das in dem Formular befindliche MRU-Listenfeld aktualisiert. Als Datengrundlage f&uuml;r das Listenfeld dient die Abfrage <b>view_app_MRUList<\/b>.<\/p>\n<p><b>Hinzuf&uuml;gen von MRU-Eintr&auml;gen nach erfolgreicher Suche nach Stammdaten<\/b><\/p>\n<p>Eine weitere M&ouml;glichkeit, Stammdaten der MRU hinzuzuf&uuml;gen, besteht beim Suchen nach Datens&auml;tzen. Im Beispielformular befindet sich &uuml;ber den Stammdaten ein ungebundenes Textfeld, in das Sie beliebige Suchmuster eingeben k&ouml;nnen, um nach Stammdaten zu suchen.<\/p>\n<p>Das Ergebnis der Suche wird mithilfe des Formulars <b>frmSearchRecord <\/b>abgebildet. Sobald ein Datensatz aus dem Ergebnis ausgew&auml;hlt wird, wird er automatisch der MRU hinzugef&uuml;gt.<\/p>\n<p>Aus Gr&uuml;nden der Benutzerfreundlichkeit gibt es im Formular zwei unterschiedliche M&ouml;glichkeiten, wie Sie eine Auswahl treffen k&ouml;nnen.<\/p>\n<p>Entweder w&auml;hlen Sie einen Datensatz aus dem Listenfeld aus und klicken anschlie&szlig;end auf die Befehlsschaltfl&auml;che <b>Ausw&auml;hlen<\/b> oder aber Sie klicken doppelt auf den gew&uuml;nschten Eintrag im Listenfeld. <\/p>\n<p>Da beide Aktionen &#8211; Doppelklicken in die Ergebnisliste oder Klick auf den Auswahl-Button &#8211; das gleiche Ergebnis bewirken, kapseln Sie die Funktionalit&auml;t einfach in einer Prozedur, die Sie bei den einzelnen Ereignissen in den Code implementieren. Die Prozedur ein Bestandteil des Formulars.<\/p>\n<pre>Private Sub fn_app_SelectRecord(SId As Long)\r\n    On Error GoTo ErrorHandler\r\n    Dim frm As Form\r\n    Dim rst As DAO.Recordset\r\n    Set frm = Forms(&quot;frmStammdaten&quot;)\r\n    Set rst = frm.RecordsetClone\r\n    rst.FindFirst &quot;SId = &quot; &amp; SId\r\n    If rst.NoMatch = False Then\r\n        Set m = New clsMRU\r\n        With m\r\n        .TableName = &quot;tblStammdaten&quot;\r\n        .PrimaryKey = &quot;SId&quot;\r\n        blnResult = .AddEntry(SId)\r\n        If blnResult = True Then\r\n            frm!lstMRU.Requery\r\n        End If\r\n        End With\r\n        frm.Bookmark = rst.Bookmark\r\n    End If\r\n    ...\r\n    DoCmd.Close acForm, Me.Name\r\n    ...\r\n    End Sub<\/pre>\n<p>Die Prozedur <b>fn_app_SelectRecord <\/b>erwartet als &Uuml;bergabeparameter die eindeutige Kennzeichnung f&uuml;r den Datensatz.<\/p>\n<p>Mithilfe dieser Kennzeichnung wird zun&auml;chst versucht, in der Datenquelle, die dem Hauptformular zugrunde liegt, den Datensatz zu finden, dem die eindeutige Kennzeichnung zugeordnet ist. Wenn ein solcher Datensatz in den Formulardaten gefunden wird, wird die Klasse <b>clsMRU <\/b>initialisiert und der Datenschl&uuml;ssel wird mit der Methode <b>AddEntry <\/b>der MRU hinzugef&uuml;gt.<\/p>\n<p>Die Prozedur wird in den folgenden Objekten im Formular aufgerufen (s. Tab. 5).<\/p>\n<table class=\"table-style-2\">\n<thead>\n<tr>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Objekt<\/p>\n<\/td>\n<td class=\"aiu-header\">\n<p class=\"tabellenkopf\">Ereignis<\/p>\n<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<tr>\n<td class=\"aiu-zeilen\">\n<\/td>\n<td class=\"aiu-zeilen\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><span style=\"color:darkgrey\">Tab. 5: Objekte und Ereignisse f&uuml;r die Speicherung der MRU<\/span><\/b><\/p>\n<p>Neben dem Hinzuf&uuml;gen von Daten zur MRU m&uuml;ssen Sie nat&uuml;rlich auch ber&uuml;cksichtigen, dass ein Benutzer einen Datensatz aus den Stammdaten wieder l&ouml;scht. Hierbei ist zu beachten, dass dieser Stammsatz auch in der MRU steht. Zu diesem Zweck finden Sie im Hauptformular <b>frmStammdaten <\/b>eine Befehlsschaltfl&auml;che mit dem Namen <b>cmdDeleteRecord<\/b>. <\/p>\n<p>Das <b>Click<\/b>-Ereignis dieses Objektes besitzt den nachfolgenden Code, der im Einzelnen beschrieben ist.<\/p>\n<pre>Private Sub cmdDeleteRecord_Click()\r\n    On Error GoTo ErrorHandler\r\n    Dim lngSId As Long\r\n    Dim blnReturnValue As Boolean\r\n    With Me\r\n    lngSId = Nz(!SId, 0)\r\n    If lngSId = 0 Then GoTo ExitCode\r\n    End With\r\n    Set cmd = New ADODB.Command\r\n    With cmd\r\n    Set .ActiveConnection = _\r\n    CurrentProject.Connection\r\n    .CommandText = SQL_DELETE_RECORD\r\n    .CommandType = adCmdText\r\n    Set prm = .CreateParameter(&quot;Sid&quot;, _\r\n    adInteger, adParamInput, , lngSId)\r\n    .Parameters.Append prm\r\n    .Execute\r\n    Me.Requery\r\n    End With\r\n    Set m = New clsMRU\r\n    blnReturnValue = m.DeleteEntry(lngSId)\r\n    If blnReturnValue = True Then\r\n        Me!lstMRU.Requery\r\n    End If\r\n    ...\r\n    End Sub<\/pre>\n<p>Zun&auml;chst wird der Datensatz mittels des <b>Command<\/b>-Objekts von ADO gel&ouml;scht. Die Vorgehensweise f&uuml;r die Verwendung von Parametern wurde bereits im Vorfeld erl&auml;utert.<\/p>\n<p>Sobald der Datensatz gel&ouml;scht wurde, wird das Formular aktualisiert und die Klasse <b>clsMRU <\/b>initialisiert.<\/p>\n<p>Um einen eventuell bestehenden Datensatz aus der MRU zu l&ouml;schen, wird die Methode <b>DeleteEntry <\/b>aufgerufen. Als Parameter erh&auml;lt sie die eindeutige Kennzeichnung des zuvor gel&ouml;schten Datensatzes.<\/p>\n<p>War der L&ouml;schvorgang erfolgreich, wird die Liste mit den zuletzt benutzten Datens&auml;tzen aktualisiert und die Prozedur wird verlassen.<\/p>\n<p><b>Zusammenfassung<\/b><\/p>\n<p>Wie Sie anhand des relativ einfachen Beispiels gesehen haben, m&uuml;ssen Sie nicht viel Arbeit investieren, um Ihren Kollegen und\/oder Kunden eine komfortable Navigationsm&ouml;glichkeit an die Hand zu geben, mit der sie leichter auf immer wieder verwendete Datens&auml;tze zugreifen k&ouml;nnen.<\/p>\n<p>Das obige Beispiel hat ebenfalls gezeigt, dass es Sinn macht, Funktionen in Themen zusammenzufassen und in Klassen zu kapseln. Sie k&ouml;nnen die Klasse <b>clsMRU <\/b>mit wenigen Handgriffen Ihren eigenen Bed&uuml;rfnissen anpassen. Sie m&uuml;ssen lediglich die Datengrundlage sowie die SQL-Befehle entsprechend ihren Tabellennamen und Schl&uuml;sselfeldern anpassen. Achten Sie au&szlig;erdem darauf, dass Sie den Datentyp f&uuml;r die Parameter &auml;ndern m&uuml;ssen, wenn ihre Schl&uuml;sselfelder nicht numerisch sind.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MRU2000.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/97DA7592-1C82-4CAB-B98D-EFC83C616D61\/aiu_575.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sie kennen sicherlich die Funktion aus dem Office-Ppaket, die Ihnen immer die letzten verwendeten Dokumente im Men&uuml; anbietet. Diese Funktionalit&auml;t hat den charmanten Vorteil, dass Sie diese Dateien nicht in der Verzeichnisstruktur Ihrer Festplatte suchen m&uuml;ssen, sondern direkt darauf zugreifen k&ouml;nnen. Dieses Prinzip namens Most Recent Used (MRU) soll im nachfolgenden Programmierbeispiel f&uuml;r Kundendaten verwendet werden.<\/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":[66022008,662008,44000027,44000023],"tags":[],"class_list":["post-55000575","post","type-post","status-publish","format-standard","hentry","category-66022008","category-662008","category-Loesungen","category-Mit_Formularen_arbeiten"],"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>Zuletzt verwendete Datens&auml;tze anzeigen - 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\/Zuletzt_verwendete_Datensaetze_anzeigen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zuletzt verwendete Datens&auml;tze anzeigen\" \/>\n<meta property=\"og:description\" content=\"Sie kennen sicherlich die Funktion aus dem Office-Ppaket, die Ihnen immer die letzten verwendeten Dokumente im Men&uuml; anbietet. Diese Funktionalit&auml;t hat den charmanten Vorteil, dass Sie diese Dateien nicht in der Verzeichnisstruktur Ihrer Festplatte suchen m&uuml;ssen, sondern direkt darauf zugreifen k&ouml;nnen. Dieses Prinzip namens Most Recent Used (MRU) soll im nachfolgenden Programmierbeispiel f&uuml;r Kundendaten verwendet werden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:19:58+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e\" \/>\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=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Zuletzt verwendete Datens&auml;tze anzeigen\",\"datePublished\":\"2021-02-11T21:19:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/\"},\"wordCount\":2596,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/40aadb536f24432ea4ffd624a81d580e\",\"articleSection\":[\"2\\\/2008\",\"2008\",\"L\u00f6sungen\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/\",\"name\":\"Zuletzt verwendete Datens&auml;tze anzeigen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/40aadb536f24432ea4ffd624a81d580e\",\"datePublished\":\"2021-02-11T21:19:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/40aadb536f24432ea4ffd624a81d580e\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/40aadb536f24432ea4ffd624a81d580e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zuletzt_verwendete_Datensaetze_anzeigen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zuletzt verwendete Datens&auml;tze anzeigen\"}]},{\"@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":"Zuletzt verwendete Datens&auml;tze anzeigen - 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\/Zuletzt_verwendete_Datensaetze_anzeigen\/","og_locale":"de_DE","og_type":"article","og_title":"Zuletzt verwendete Datens&auml;tze anzeigen","og_description":"Sie kennen sicherlich die Funktion aus dem Office-Ppaket, die Ihnen immer die letzten verwendeten Dokumente im Men&uuml; anbietet. Diese Funktionalit&auml;t hat den charmanten Vorteil, dass Sie diese Dateien nicht in der Verzeichnisstruktur Ihrer Festplatte suchen m&uuml;ssen, sondern direkt darauf zugreifen k&ouml;nnen. Dieses Prinzip namens Most Recent Used (MRU) soll im nachfolgenden Programmierbeispiel f&uuml;r Kundendaten verwendet werden.","og_url":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:19:58+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Zuletzt verwendete Datens&auml;tze anzeigen","datePublished":"2021-02-11T21:19:58+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/"},"wordCount":2596,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e","articleSection":["2\/2008","2008","L\u00f6sungen","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/","url":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/","name":"Zuletzt verwendete Datens&auml;tze anzeigen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e","datePublished":"2021-02-11T21:19:58+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/40aadb536f24432ea4ffd624a81d580e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Zuletzt_verwendete_Datensaetze_anzeigen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Zuletzt verwendete Datens&auml;tze anzeigen"}]},{"@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\/55000575","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=55000575"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000575\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}