{"id":55000996,"date":"2015-10-01T00:00:00","date_gmt":"2020-07-04T16:54:51","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=996"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Nach_Daten_im_Unterformular_suchen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/","title":{"rendered":"Nach Daten im Unterformular suchen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die Konstellation von Haupt- und Unterformular zur Darstellung von Daten aus 1:n- beziehungsweise m:n-Beziehungen ist bekannt. Einen Datensatz im Hauptformular zu suchen ist auch kein Hexenwerk. Aber wie sieht es aus, wenn wir das Hauptformular nach den Datens&auml;tzen filtern wollen, deren verkn&uuml;pfte Tabelle einen Datensatz mit einem bestimmten Kriterium enth&auml;lt Und wenn wir dann noch einen Schritt weitergehen und noch den ersten passenden Datensatz im Unterformular markieren wollen Wie dies gelingt, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Die Tabellen der Beispieldatenbank rekrutieren sich wieder eimal aus der S&uuml;dsturm-Datenbank, unserer angepassten Nordwind-Variante. Im ersten Beispiel schauen wir uns die Kategorien im Hauptformular an und die Artikel einer jeden Kategorie im Unterformular.<\/p>\n<p>Mit einem Suchfeld im Hauptformular wollen wir nach Artikeln filtern. Au&szlig;erdem soll es zwei Schaltfl&auml;chen geben, mit denen wir zwischen den Ergebnissen hin- und herbl&auml;ttern k&ouml;nnen. Das Formular soll dann wie in Bild 1 aussehen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_05\/pic_996_001.png\" alt=\"Formular mit Filter nach Artikelname, Variante I\" width=\"600\" height=\"392,8444\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Formular mit Filter nach Artikelname, Variante I<\/span><\/b><\/p>\n<p><b>Aufbau des Formulars<\/b><\/p>\n<p>Das Hauptformular verwendet die Tabelle <b>tblKategorien <\/b>als Datenherkunft und zeigt die beiden Felder <b>KategorieID <\/b>und <b>Kategoriename <\/b>an. Das Unterformular steuert die Daten der Tabelle <b>tblArtikel <\/b>bei, und zwar in der Daten-blatt-ansicht. Damit es jeweils nur die Datens&auml;tze anzeigt, die mit dem aktuellen Datensatz der Tabelle <b>tblKategorien <\/b>im Hauptformular verkn&uuml;pft sind, erhalten die Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements jeweils den Wert <b>KategorieID<\/b>.<\/p>\n<p><b>Steuerelemente<\/b><\/p>\n<p>Die zus&auml;tzlichen Steuerelemente im Formular hei&szlig;en <b>txtSuchbegriff, cmdVorheriger <\/b>und <b>cmdNaechster<\/b>. Wenn der Benutzer einen Begriff in das Textfeld <b>txtSuchbegriff <\/b>eingibt, soll die erste Kombination aus Kategorie und Artikel gefunden werden, deren Artikelname dem im Suchfeld eingegebenen Ausdruck entspricht (Platzhalter wie das Sternchen (*) sind dabei erlaubt).<\/p>\n<p>Die beiden Schaltfl&auml;chen <b>cmdVorheriger<\/b> und <b>cmdNaechster <\/b>sind beim Laden des Formulars noch deaktiviert. Erst, wenn der Benutzer einen Suchbegriff eingibt, wird gepr&uuml;ft, ob eine der Schaltfl&auml;chen aktiviert werden soll &#8211; oder auch beide. Zeigt das Formular den ersten Treffer an und gibt es noch einen weiteren, soll die Schaltfl&auml;che <b>cmdNaechster <\/b>aktiviert werden. Bl&auml;ttert der Benutzer damit zum folgenden Treffer, soll auch die Schaltfl&auml;che <b>cmdVorheriger <\/b>aktiviert werden. Die Schaltfl&auml;che <b>cmdNaechster<\/b> bleibt dabei verf&uuml;gbar, bis der Benutzer zum letzten Ergebnis weitergeklickt hat.<\/p>\n<p><b>Programmierung der Suche<\/b><\/p>\n<p>Die Suchfunktion erfordert einen etwas anderen Ansatz als &uuml;bliche Suchfunktionen. Direkt nach der Eingabe des Suchbegriffs erstellen wir ein Recordset, das die Tabelle <b>tblArtikel <\/b>aufnimmt &#8211; mit dem eingegebenen Suchbegriff als Vergleichswert f&uuml;r das Feld <b>Artikelname<\/b>. Die Tabelle liefert f&uuml;r jedes Suchergebnis sowohl die <b>ArtikelID <\/b>also auch die <b>KategorieID <\/b>aus dem entsprechenden Fremdschl&uuml;sselfeld. Damit k&ouml;nnen wir dann also sowohl den gesuchten Datensatz im Unterformular einstellen als auch die dazu passende Kategorie im Hauptformular.<\/p>\n<p><b>Schaltfl&auml;chen deaktivieren<\/b><\/p>\n<p>Beim Laden des Formulars sollen die beiden Schaltfl&auml;chen <b>cmdVorheriger <\/b>und <b>cmdNaechster <\/b>zun&auml;chst deaktiviert sein. Dazu legen wir f&uuml;r das Ereignis <b>Beim Laden <\/b>die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     Me!cmdNaechster.Enabled = <span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nach der Eingabe eines Suchbegriffes und dem Ausl&ouml;sen des Ereignisses <b>Nach Aktualisierung <\/b>soll die Prozedur aus Listing 1 ausgel&ouml;st werden. Die Prozedur f&uuml;llt die Variable <b>db <\/b>mit einem Verweis auf das <b>Database<\/b>-Objekt der aktuellen Datenbank. Dann liest sie den Suchbegriff aus dem Textfeld <b>txtSuchbegriff <\/b>in die Variable <b>strSuchbegriff <\/b>ein. Hat der Suchbegriff eine L&auml;nge von mehr als null Zeichen, erstellt die Prozedur ein neues Recordset, das alle Datens&auml;tze der Tabelle <b>tblArtikel <\/b>enth&auml;lt, deren Feld Artikelname dem Suchbegriff entspricht. Dieses Recordset speichert die Prozedur in einer Variablen, die im Kopf des Klassenmoduls wie folgt deklariert wird und damit von allen Prozeduren des Moduls aus erreichbar ist:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSuchbegriff_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSuchbegriff<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strSuchbegriff = Nz(Me!txtSuchbegriff, \"\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSuchbegriff) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rstErgebnis = db.OpenRecordset(\"SELECT ArtikelID, KategorieID FROM tblArtikel WHERE Artikelname LIKE ''\" _\r\n             & strSuchbegriff & \"'' ORDER BY tblKategorien.KategorieID, tblArtikel.ArtikelID\", dbOpenSnapshot)\r\n         SteuerelementeAktualisieren\r\n         Filtern\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         FilterAufheben\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur f&uuml;r das Ereignis Nach Aktualisierung des Suchfeldes<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rstErgebnis<span style=\"color:blue;\"> As <\/span>DAO.Recordset<\/pre>\n<p>Wir verwenden den Wert <b>dbOpenSnapshot <\/b>als Parameter, da dies direkt den Wert der Eigenschaft <b>Recordcount <\/b>des Recordsets verf&uuml;gbar macht. Nachdem dies geschehen ist, ruft die Prozedur zwei weitere Routinen namens <b>SteuerelementeAktualisieren<\/b> und <b>Filtern <\/b>auf. Erstere aktiviert oder deaktiviert die beiden Schaltfl&auml;chen <b>cmdVorheriger <\/b>und <b>cmdNaechster <\/b>in Abh&auml;ngigkeit von der Datensatzposition, der zweite filtert die Daten in Haupt- und Unterformular nach dem aktuellen Datensatz des Recordsets <b>rstErgebnis<\/b>.<\/p>\n<p>Sollte das Textfeld <b>txtSuchbegriff <\/b>keinen Wert enthalten, ruft die Prozedur die Routine <b>FilterAufheben <\/b>auf, was wieder alle Datens&auml;tze in Haupt- und Unterformular anzeigt.<\/p>\n<p><b>Steuerelemente aktualisieren<\/b><\/p>\n<p>Die Routine <b>SteuerelementeAktualisieren <\/b>k&uuml;mmert sich um das Aktivieren und Deaktivieren der beiden Schaltfl&auml;chen <b>cmdVorheriger <\/b>und <b>cmdNaechster<\/b>. Die erste <b>If&#8230;Then<\/b>-Bedingung dieser Routine pr&uuml;ft, ob die aktuelle Position des Datensatzzeigers von <b>rstErgebnis <\/b>kleiner als  die Anzahl der Datens&auml;tze minus eins ist.<\/p>\n<p>Minus eins deshalb, weil <b>AbsolutePosition <\/b>f&uuml;r den ersten Datensatz den Wert <b>0 <\/b>liefert. In diesem Fall aktiviert die Routine die Schaltfl&auml;che <b>cmdNaechster<\/b>, anderenfalls wird sie deaktiert. Bei der Schaltfl&auml;che <b>cmdVorheriger <\/b>sieht es &auml;hnlich aus: Die <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob <b>AbsolutePosition <\/b>gr&ouml;&szlig;er <b>0 <\/b>ist. Falls ja, kann der Benutzer noch einen Datensatz nach vorn bl&auml;ttern und die Schaltfl&auml;che <b>cmdVorheriger <\/b>wird aktiviert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>SteuerelementeAktualisieren()\r\n     If rstErgebnis.AbsolutePosition _\r\n             &lt; rstErgebnis.RecordCount - 1 Then\r\n         Me!cmdNaechster.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!cmdNaechster.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span>rstErgebnis.AbsolutePosition &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b>Filtern der Artikel<\/b><\/p>\n<p>Die Routine <b>Filtern <\/b>sorgt f&uuml;r die Anzeige des jeweils aktuellen Datensatzes des Recordsets <b>rstErgebnis<\/b> (s. Listing 2). Dabei pr&uuml;ft die Routine zun&auml;chst, ob das Recordset mindestens einen Datensatz enth&auml;lt. Falls ja, stellt sie die Eigenschaft <b>Filter <\/b>des Hauptformulars auf einen Ausdruck ein, bei dem der Wert von <b>KategorieID <\/b>der Datenherkunft dem Wert dieses Feldes im aktuelle Datensatz des Recordsets entspricht und aktiviert den Filter durch Setzen von <b>FilterOn <\/b>auf <b>True<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Filtern()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rstErgebnis.RecordCount = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">With<\/span> Me\r\n             .Filter = \"KategorieID = \" & rstErgebnis!KategorieID\r\n             .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         <span style=\"color:blue;\">With<\/span> Me!sfmArtikelNachKategorie.Form\r\n             .Filter = \"ArtikelID = \" & rstErgebnis!ArtikelID\r\n             .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">With<\/span> Me\r\n             .Filter = \"1=2\"\r\n             .FilterOn = <span style=\"color:blue;\">True<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur zum Filtern der Daten in Haupt- und Unterformular<\/span><\/b><\/p>\n<p>Auf die gleiche Weise filtert es das Unterformular so, dass nur der Artikel aus dem aktuellen Datensatz des Recordsets erscheint. Liefert <b>rstErgebnis <\/b>keinen Datensatz, stellt die Prozedur den Filter f&uuml;r das Hauptformular auf den Ausdruck <b>1=2 <\/b>ein, was keine Datens&auml;tze liefert. Dementsprechend bleibt auch das Unterformular leer.<\/p>\n<p><b>Aufheben des Filters<\/b><\/p>\n<p>Leert der Benutzer das Textfeld <b>strSuchbegriff <\/b>und l&ouml;st das Ereignis <b>Nach Aktualisierung <\/b>des Textfeldes aus, ruft die Prozedur <b>txtSuchbegriff_AfterUpdate <\/b>wie oben erw&auml;hnt die Prozedur <b>FilterAufheben <\/b>auf.<\/p>\n<p>Diese leert die Eigenschaft <b>Filter <\/b>sowohl des Unterformulars als auch des Hauptformulars. Dabei ist die Reihenfolge wichtig &#8211; Sie m&uuml;ssen erst den Filter im Unterformular aufheben und dann den im Hauptformular, anderenfalls zeigt das Formular die Datens&auml;tze im Unterformular nicht korrekt an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FilterAufheben()\r\n     Me!sfmArtikelNachKategorie.Form.Filter = \"\"\r\n     Me.Filter = \"\"\r\n     <span style=\"color:blue;\">Set<\/span> rstErgebnis = Nothing\r\n     Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     Me!cmdNaechster.Enabled = <span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem leert die Prozedur das Recordset <b>rstErgebnis <\/b>und deaktiviert die Schaltfl&auml;chen <b>cmdVorheriger <\/b>und <b>cmdNaechster<\/b>.<\/p>\n<p><b>Funktion der Schaltfl&auml;chen<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>cmdNaechster <\/b>soll beim Anklicken das n&auml;chste Suchergebnis liefern, also den folgenden Datensatz der Recordsets <b>rstErgebnis<\/b>. Dazu bewegt die Prozedur den Datensatzzeiger mit der Methode <b>MoveNext <\/b>zum folgenden Datensatz und ruft dann die beiden Routinen <b>SteuerelementeAktualisieren <\/b>und <b>Filtern <\/b>auf, um sowohl die Aktivierung der Steuerelemente zu pr&uuml;fen als auch Haupt- und Unterformular nach dem aktuellen Suchergebnis zu filtern:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNaechster_Click()\r\n     rstErgebnis.Move<span style=\"color:blue;\">Next<\/span>\r\n     SteuerelementeAktualisieren\r\n     Filtern\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur, die durch einen Klick auf die Schaltfl&auml;che <b>cmdVorheriger <\/b>ausgel&ouml;st wird, erledigt die gleiche Aufgabe, springt aber zum vorherigen Datensatz des Recordsets mit den Suchergebnissen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVorheriger_Click()\r\n     rstErgebnis.MovePrevious\r\n     SteuerelementeAktualisieren\r\n     Filtern\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozeduren sorgen in dieser Form daf&uuml;r, dass Haupt- und Unterformular jeweils nur einen Datensatz anzeigen. Das mag f&uuml;r bestimmte Anwendungszwecke passen, aber nicht f&uuml;r alle &#8211; also stellen wir eine Alternative vor.<\/p>\n<p><b>Variante II: Suchergebnis aktivieren statt filtern<\/b><\/p>\n<p>Die zweite Variante soll das Haupt- und Unterformular nicht nach dem aktuell gefundenen Datensatz filtern, sondern weiterhin alle verf&uuml;gbaren Datens&auml;tze anzeigen. Allerdings soll der jeweilige Datensatz im Unterformular markiert werden.<\/p>\n<p>Formular und Unterformular sind gleich aufgebaut, allerdings hei&szlig;t das Formular nun <b>frmArtikelNachKategorien_Markieren <\/b>und das Unterformular <b>sfmArtikelNachKategorien_Markieren<\/b> (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_05\/pic_996_002.png\" alt=\"Formular mit Filter nach Artikelname, Variante II\" width=\"600\" height=\"392,8444\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Formular mit Filter nach Artikelname, Variante II<\/span><\/b><\/p>\n<p>Nach der Eingabe des Suchbegriffs sollen Haupt- und Unterformular gar nicht gefiltert werden, sondern nur die jeweiligen Datens&auml;tze markiert werden. Auch hier verwenden wir ein Recordset zum Ermitteln der Suchergebenisse:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rstErgebnis<span style=\"color:blue;\"> As <\/span>DAO.Recordset<\/pre>\n<p>Beim Laden des Formulars deaktivieren wir wieder die beiden Schaltfl&auml;chen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     Me!cmdNaechster.Enabled = <span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nach der Eingabe des Suchbegriffs wird die Prozedur aus Listing 3 ausgel&ouml;st. Diese sieht so &auml;hnlich aus wie die aus dem vorherigen Beispiel, aber sie ruft die Routine Markieren statt Filtern auf. Und bei Aktualisierung bei leerem Textfeld erfolgt der Aufruf der Routine <b>MarkierungAufheben<\/b>, nicht mehr von <b>FilterAufheben<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSuchbegriff_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSuchbegriff<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strSuchbegriff = Nz(Me!txtSuchbegriff, \"\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSuchbegriff) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rstErgebnis = db.OpenRecordset(\"SELECT ArtikelID, KategorieID FROM tblArtikel WHERE Artikelname LIKE ''\" _\r\n             & strSuchbegriff & \"'' ORDER BY KategorieID, ArtikelID\", dbOpenSnapshot)\r\n         SteuerelementeAktualisieren\r\n         Markieren\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         MarkierungAufheben\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aktionen nach dem Eingeben des Suchbegriffs<\/span><\/b><\/p>\n<p><b>Fund markieren<\/b><\/p>\n<p>Die Prozedur <b>Markieren <\/b>pr&uuml;ft zun&auml;chst, ob das Recordset mit der Ergebnisliste &uuml;berhaupt einen Eintrag enth&auml;lt. Falls ja, ruft sie die <b>FindFirst<\/b>-Methode des <b>Recordset<\/b>-Objekts des Hauptformulars auf, um die richtige Kategorie auszuw&auml;hlen (s. Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Markieren()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rstErgebnis.RecordCount = 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me.Recordset.FindFirst \"KategorieID = \" & rstErgebnis!KategorieID\r\n         Me!sfmArtikelNachKategorie_Markieren.Form.Recordset.FindFirst \"ArtikelID = \" & rstErgebnis!ArtikelID\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Keine passenden Daten gefunden\"\r\n         MarkierungAufheben\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Diese Prozedur markiert den n&auml;chsten Eintrag des Ergebnis-Recordsets.<\/span><\/b><\/p>\n<p>Dabei &uuml;bergibt sie ein Kriterium, das den Wert des Feldes <b>KategorieID <\/b>des Recordsets enth&auml;lt. Das Hauptformular zeigt so schon einmal den richtigen Datensatz an.<\/p>\n<p>Nun soll das Unterformular noch den aktuellen Datensatz der Ergebnisliste aus <b>rstErgebnis <\/b>liefern. Deshalb verwenden wir auch hier die <b>FindFirst<\/b>-Methode des entsprechenden Recordset-Objekts &#8211; nur diesmal mit dem Kriterium <b>&#8222;ArtikelID = &#8220; &#038; rstErgebnis!ArtikelID<\/b>. Dadurch landet der Datensatzzeiger im Unterformular genau bei dem gesuchten Datensatz.<\/p>\n<p><b>Markierung aufheben<\/b><\/p>\n<p>Sollen die Markierungen wieder entfernt werden, was beispielsweise nach dem Leeren und Aktualisieren des Textfeldes <b>txtSuchbegriff <\/b>geschehen soll, wird die folgende Prozedur aufgerufen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>MarkierungAufheben()\r\n     Me.Recordset.MoveFirst\r\n     Me!sfmArtikelNachKategorie_Markieren. Form.Recordset.MoveFirst\r\n     <span style=\"color:blue;\">Set<\/span> rstErgebnis = Nothing\r\n     Me!cmdVorheriger.Enabled = <span style=\"color:blue;\">False<\/span>\r\n     Me!cmdNaechster.Enabled = <span style=\"color:blue;\">False<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese Prozedur springt wieder zum ersten Datensatz des Hauptformulars und dann zum ersten Datensatz des Unterformulars. Das Recordset mit der Ergebnisliste wird geleert und die Schaltfl&auml;chen zum Vor- und Zur&uuml;ckbl&auml;ttern werden deaktiviert.<\/p>\n<p><b>In Ergebnissen bl&auml;ttern<\/b><\/p>\n<p>Das Verhalten beim Bl&auml;ttern in den gefundenen Datens&auml;tzen sieht nat&uuml;rlich ganz anders aus: Wenn etwa eine Kategorie gleich mehrere Treffer liefert, bleibt die Kategorie im Hauptformular erhalten und es werden beim Anklicken der Schaltfl&auml;che <b>cmdNaechster <\/b>nacheinander die einzelnen Funde im Unterformular markiert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNaechster_Click()\r\n     rstErgebnis.Move<span style=\"color:blue;\">Next<\/span>\r\n     SteuerelementeAktualisieren\r\n     Markieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Genauso l&auml;uft es nat&uuml;rlich auch andersherum:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVorheriger_Click()\r\n     rstErgebnis.MovePrevious\r\n     SteuerelementeAktualisieren\r\n     Markieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur zum Aktivieren oder Deaktivieren der beiden Schaltfl&auml;chen <b>cmdNaechster <\/b>und <b>cmdVorheriger <\/b>entspricht genau dem vorherigen Beispiel, daher f&uuml;hren wir diese hier nicht nochmals auf.<\/p>\n<p><b>Nach Daten aus m:n-Beziehungen suchen<\/b><\/p>\n<p>Im letzten Beispiel schauen wir uns eine Konstellation aus Haupt- und Unterformular an, bei der Sie ein Feld durchsuchen, das &uuml;ber die im Unterformular angezeigte m:n-Beziehung mit dem Datensatz im Hauptformular verkn&uuml;pft ist. Das Beispielformular finden Sie in Bild 3.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_05\/pic_996_002.png\" alt=\"Suche nach Daten aus einer m:n-Beziehung\" width=\"600\" height=\"392,8444\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Suche nach Daten aus einer m:n-Beziehung<\/span><\/b><\/p>\n<p>Die Prozeduren &uuml;bernehmen wir weitgehend aus den vorherigen Beispielen. Einen wichtigen Unterschied finden Sie jedoch in der Prozedur, die nach der Eingabe eines Suchbegriffs ausgel&ouml;st wird (s. Listing 5). Diese stellt eine etwas andere SQL-Abfrage zusammen. Diese ber&uuml;cksichtigt die beiden verkn&uuml;pften Tabellen <b>tblBestelldetails <\/b>und <b>tblArtikel<\/b>, weil wir ja die Daten des Formulars nach dem Namen des Artikels durchsuchen wollen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSuchbegriff_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSuchbegriff<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strSuchbegriff = Nz(Me!txtSuchbegriff, \"\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSuchbegriff) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> rstErgebnis = db.OpenRecordset(\"SELECT tblBestelldetails.BestellungID, &quot;_\r\n             &amp; &quot;tblBestelldetails.BestelldetailID,  tblBestelldetails.ArtikelID &quot; _\r\n             &amp; &quot;FROM tblBestelldetails INNER JOIN tblArtikel ON tblBestelldetails.ArtikelID  &quot; _\r\n             &amp; &quot;= tblArtikel.ArtikelID WHERE tblArtikel.Artikelname LIKE ''\" _\r\n             & strSuchbegriff & \"'' ORDER BY tblBestelldetails.BestelldetailID\", dbOpenSnapshot)\r\n         SteuerelementeAktualisieren\r\n         Markieren\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         MarkierungAufheben\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Zusammenstellen der Ergebnisabfrage nach dem Eingeben eines Suchbegriffs<\/span><\/b><\/p>\n<p>Der zweite Unterschied findet sich in der Prozedur, welche die gefundenen Daten in Haupt- und Unterformular markiert. Hier haben wir noch zwei Zeilen hinzugef&uuml;gt, die daf&uuml;r sorgen, dass der Datensatz im Unterformular auch noch komplett hervorgehoben wird. Daf&uuml;r verschieben wir zun&auml;chst den Fokus auf das Unterformular und rufen dann die Methode <b>RunCommand <\/b>mit dem Parameter <b>acCmdSelectRecord <\/b>auf, um die komplette Spalte zu markieren:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Markieren()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> rstErgebnis.RecordCount = 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me.Recordset.FindFirst \"BestellungID = \" _\r\n             & rstErgebnis!BestellungID\r\n         Me!sfmArtikelNachBestellung.Form.Recordset. FindFirst \"ArtikelID = \" & rstErgebnis!ArtikelID\r\n         Me!sfmArtikelNachBestellung.SetFocus\r\n         RunCommand acCmdSelectRecord\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Keine passenden Daten gefunden\"\r\n         MarkierungAufheben\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag hat drei Varianten f&uuml;r die Suche nach Daten der Datenherkunft des Unterformulars in Haupt-\/Unterformularkonstellationen geliefert.<\/p>\n<p>Die erste zeigt jeweils nur die Kombination aus Master-\/Detaildatensatz an, die zum aktuellen Suchergebnis passt.<\/p>\n<p>Die zweite schr&auml;nkt die Datenherkunft von Haupt- und Unterformular nicht ein, sondern springt zu den gefundenen Datens&auml;tzen.<\/p>\n<p>Die dritte liefert ein etwas komplexeres Beispiel, da die Daten des Unterformulars aus einer m:n-Beziehung stammen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Nach1nDatenSuchen.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/5E4E078C-3E4E-4358-9DBF-2B28C910C8C0\/aiu_996.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Konstellation von Haupt- und Unterformular zur Darstellung von Daten aus 1:n- beziehungsweise m:n-Beziehungen ist bekannt. Einen Datensatz im Hauptformular zu suchen ist auch kein Hexenwerk. Aber wie sieht es aus, wenn wir das Hauptformular nach den Datens&auml;tzen filtern wollen, deren verkn&uuml;pfte Tabelle einen Datensatz mit einem bestimmten Kriterium enth&auml;lt Und wenn wir dann noch einen Schritt weitergehen und noch den ersten passenden Datensatz im Unterformular markieren wollen Wie dies gelingt, zeigt der vorliegende 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":[662015,66052015,44000023],"tags":[],"class_list":["post-55000996","post","type-post","status-publish","format-standard","hentry","category-662015","category-66052015","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>Nach Daten im Unterformular suchen - 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\/Nach_Daten_im_Unterformular_suchen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nach Daten im Unterformular suchen\" \/>\n<meta property=\"og:description\" content=\"Die Konstellation von Haupt- und Unterformular zur Darstellung von Daten aus 1:n- beziehungsweise m:n-Beziehungen ist bekannt. Einen Datensatz im Hauptformular zu suchen ist auch kein Hexenwerk. Aber wie sieht es aus, wenn wir das Hauptformular nach den Datens&auml;tzen filtern wollen, deren verkn&uuml;pfte Tabelle einen Datensatz mit einem bestimmten Kriterium enth&auml;lt Und wenn wir dann noch einen Schritt weitergehen und noch den ersten passenden Datensatz im Unterformular markieren wollen Wie dies gelingt, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-04T16:54:51+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Nach Daten im Unterformular suchen\",\"datePublished\":\"2020-07-04T16:54:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/\"},\"wordCount\":1980,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74d9beff8fe14bf3b341fec87229d19f\",\"articleSection\":[\"2015\",\"5\\\/2015\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/\",\"name\":\"Nach Daten im Unterformular suchen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74d9beff8fe14bf3b341fec87229d19f\",\"datePublished\":\"2020-07-04T16:54:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74d9beff8fe14bf3b341fec87229d19f\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/74d9beff8fe14bf3b341fec87229d19f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nach_Daten_im_Unterformular_suchen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nach Daten im Unterformular suchen\"}]},{\"@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":"Nach Daten im Unterformular suchen - 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\/Nach_Daten_im_Unterformular_suchen\/","og_locale":"de_DE","og_type":"article","og_title":"Nach Daten im Unterformular suchen","og_description":"Die Konstellation von Haupt- und Unterformular zur Darstellung von Daten aus 1:n- beziehungsweise m:n-Beziehungen ist bekannt. Einen Datensatz im Hauptformular zu suchen ist auch kein Hexenwerk. Aber wie sieht es aus, wenn wir das Hauptformular nach den Datens&auml;tzen filtern wollen, deren verkn&uuml;pfte Tabelle einen Datensatz mit einem bestimmten Kriterium enth&auml;lt Und wenn wir dann noch einen Schritt weitergehen und noch den ersten passenden Datensatz im Unterformular markieren wollen Wie dies gelingt, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-07-04T16:54:51+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Nach Daten im Unterformular suchen","datePublished":"2020-07-04T16:54:51+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/"},"wordCount":1980,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f","articleSection":["2015","5\/2015","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/","url":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/","name":"Nach Daten im Unterformular suchen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f","datePublished":"2020-07-04T16:54:51+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/74d9beff8fe14bf3b341fec87229d19f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Nach_Daten_im_Unterformular_suchen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Nach Daten im Unterformular suchen"}]},{"@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\/55000996","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=55000996"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000996\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}