{"id":55001509,"date":"2024-08-01T00:00:00","date_gmt":"2024-10-17T22:07:01","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1509"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Schnellsuche_im_Listenfeld_mal_anders","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/","title":{"rendered":"Schnellsuche im Listenfeld mal anders"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba\" width=\"1\" height=\"1\" alt=\"\"><b>In vielen bisherigen L&ouml;sungen haben wir f&uuml;r die Schnellsuche im Listenfeld oder auch in Unterformularen in der Datenblattansicht ein Textfeld als Suchfeld verwendet. Direkt bei Eingabe eines jeden Zeichens wurde das Suchergebnis aktualisiert. In diesem Beitrag wollen wir einmal eine noch ergonomischere Version vorstellen. Der Unterschied soll so aussehen, dass man den Suchbegriff eingeben kann, w&auml;hrend das Listenfeld den Fokus hat. Es soll also kein Wechseln vom Suchfeld zum Listenfeld und zur&uuml;ck n&ouml;tig sein, wenn man durch die Suche den gew&uuml;nschten Datensatz vorgefunden hat und diesen beispielsweise markieren und beispielsweise durch Bet&auml;tigen der Eingabetaste eine Aktion f&uuml;r diesen Eintrag durchf&uuml;hren m&ouml;chte. Wir zeigen dies am Beispiel aus dem Beitrag &#8222;m:n-Beziehung mit Listenfeld und Datenblatt&#8220; (www.access-im-unternehmen.de\/1510).<\/b><\/p>\n<p>Im oben genannten Beitrag haben wir bereits eine effiziente M&ouml;glichkeit entwickelt, um eine m:n-Beziehung mithilfe eines Listenfeldes und eines Datenblattes in einem Unterformular abzubilden. Das Ziel war es, dass wir nicht wie in &uuml;blichen Bestellformularen einfach nur das gesuchte Produkt aus dem Auswahlfeld der hinzuzuf&uuml;genden Bestellposition heraussuchen k&ouml;nnen.<\/p>\n<p>Stattdessen wollten wir die M&ouml;glichkeit bieten, solche Eintr&auml;ge aus einem Listenfeld auszuw&auml;hlen und diese schnell per Doppelklick zu dem Datensatz im &uuml;bergeordneten Formular hinzuzuf&uuml;gen. Bei dem Beispiel dreht es sich um Fahrzeuge und ihre Ausstattungen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1509_001.png\" alt=\"Beispiel f&uuml;r die Listenfeldsuche\" width=\"649,559\" height=\"339,2709\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beispiel f&uuml;r die Listenfeldsuche<\/span><\/b><\/p>\n<p>Es ist nun vielleicht bereits etwas effizienter, einen Eintrag aus dem Listenfeld auszuw&auml;hlen und dieses per Doppelklick zum Fahrzeug hinzuzuf&uuml;gen &#8211; gerade, wenn die ausgew&auml;hlten Eintr&auml;ge danach nicht mehr &uuml;ber das Listenfeld angeboten werden. Allerdings kann es sein, dass es &uuml;ber 200 Eintr&auml;ge in der Liste der Sonderausstattungen gibt. In diesem Fall ist es immer noch langwierig, wenn man sich durch die ganze Liste w&uuml;hlen muss, um zum gesuchten Eintrag zu gelangen. Auch eine alphabetische Sortierung ist nicht unbedingt zielf&uuml;hrend, weil manche Ausstattungen so benannt sind, dass der gesuchte Begriff noch nicht einmal vorn in der Bezeichnung der Ausstattung steht.<\/p>\n<h2>Suchfunktion zum Listenfeld hinzuf&uuml;gen<\/h2>\n<p>Der n&auml;chste Schritt w&auml;re also eine Such- beziehungsweise Filterfunktion zum Listenfeld hinzuzuf&uuml;gen. Eine solche haben wir schon des &Ouml;fteren gebaut und wir haben immer ein Textfeld zum Listenfeld hinzugef&uuml;gt, in das der Benutzer zeichenweise den Suchbegriff eingeben kann.<\/p>\n<p>Der Inhalt des Listenfeldes wurde nach jeder &Auml;nderung aktualisiert, damit der Benutzer schnell sehen konnte, wenn der gesuchte Eintrag im sichtbaren Bereich auftauchte oder sogar ganz oben in der Liste stand.<\/p>\n<p>Diesem Textfeld, das wir wie auch in diesem Fall meist <b>txtSuche <\/b>nennen, f&uuml;gen wir f&uuml;r die Ereigniseigenschaft <b>Bei &Auml;nderung <\/b>den Wert <b>[Ereignisprozedur]<\/b> hinzu und hinterlegen f&uuml;r diese eine Ereignisprozedur wie die folgende:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSuche_Change()\r\n     AusstattungslisteFuellen Me!txtSuche.Text\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese ruft die Prozedur <b>AusstattungslisteFuellen <\/b>auf und &uuml;bergibt dieser den aktuellen Inhalt des Textfeldes <b>txtSuche <\/b>als Parameter.<\/p>\n<h2>F&uuml;llen des Listenfeldes auf Basis des Suchkriteriums<\/h2>\n<p>Die Prozedur <b>AusstattungslisteFuellen <\/b>erwartet mit dem Parameter <b>strSuche <\/b>den Suchbegriff, also die Zeichenkette, die in den anzuzeigenden Listenfeld-Eintr&auml;gen enthalten sein muss (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AusstattungslisteFuellen(<span style=\"color:blue;\">Optional<\/span> strSuche<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngFahrzeugID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">If <\/span>Me.NewRecord = <span style=\"color:blue;\">False<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         lngFahrzeugID = Nz(Me!FahrzeugID)\r\n         strSQL = \"SELECT AusstattungID, Ausstattung \" _\r\n             & \"FROM tblAusstattungen \" _\r\n             & \"WHERE [Suche]AusstattungID \" _\r\n             & \"<span style=\"color:blue;\">Not<\/span> In (\" _\r\n             & \"SELECT AusstattungID \" _\r\n             & \"FROM tblFahrzeugeAusstattungen \" _\r\n             & \"WHERE FahrzeugID = \" & lngFahrzeugID _\r\n             & \") \" _\r\n             & \"ORDER BY Ausstattung;\"\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSuche) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strSQL = <span style=\"color:blue;\">Replace<\/span>(strSQL, \"[Suche]\", \"\")\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strSQL = <span style=\"color:blue;\">Replace<\/span>(strSQL, \"[Suche]\", \"Ausstattung LIKE ''*\" & strSuche & \"*'' AND \")\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strSQL = \"SELECT AusstattungID, Ausstattung FROM tblAusstattungen ORDER BY Ausstattung\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     Me!lstAusstattungen.RowSource = strSQL\r\n     Me!lstAusstattungen.Value = Null\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Aktualisieren der Eintr&auml;ge im Listenfeld<\/span><\/b><\/p>\n<p>Sie pr&uuml;ft zuerst, ob das Hauptformular aktuell einen neuen, leeren Datensatz enth&auml;lt. In diesem Fall wird der zweite Teil der <b>If&#8230;Then<\/b>-Bedingung ausgef&uuml;hrt, der dem Listenfeld eine Datensatzherkunft zuweist, die alle Eintr&auml;ge der Tabelle <b>tblAusstattungen <\/b>liefert.<\/p>\n<p>Anderenfalls ermittelt die Prozedur den Prim&auml;rschl&uuml;sselwert des im Hauptformular angezeigten Fahrzeugs und speichert diesen in der Variablen <b>lngFahrzeugID<\/b>.<\/p>\n<p>Anschlie&szlig;end setzt sie in der Variablen <b>strSQL <\/b>eine SQL-Anweisung zusammen, die alle Datens&auml;tze der Tabelle <b>tblAusstattungen <\/b>liefert, die noch nicht mit dem aktuell angezeigten Fahrzeug verkn&uuml;pft sind.<\/p>\n<p>Diese Abfrage verwendet eine Unterabfrage, die alle Eintr&auml;ge der Tabelle <b>tblFahrzeugeAusstattungen <\/b>liefert, deren <b>FahrzeugID <\/b>mit dem Wert des aktuellen Fahrzeugs &uuml;bereinstimmt.<\/p>\n<p>Hier finden wir einen Platzhalter namens <b>[Suche]<\/b>, der anschlie&szlig;end ersetzt wird. Befindet sich im Textfeld <b>txtSuche <\/b>eine Zeichenkette mit einer L&auml;nge von <b>0 <\/b>Zeichen, wird <b>[Suche]<\/b> einfach durch eine leere Zeichenkette ersetzt.<\/p>\n<p>Anderenfalls f&uuml;gen wir f&uuml;r <b>[Suche]<\/b> ein vollst&auml;ndiges Kriterium wie <b>Ausstattung LIKE &#8220;*Suchbegriff*&#8220; AND <\/b>ein.<\/p>\n<p>Schlie&szlig;lich wird der Inhalt aus <b>strSQL <\/b>der Eigenschaft <b>RowSource <\/b>(<b>Datensatzherkunft<\/b>) des Listenfeldes zugewiesen und der Wert des Listenfeldes wird auf <b>Null <\/b>eingestellt.<\/p>\n<p>Auf diese Weise funktioniert die herk&ouml;mmliche Suche &uuml;ber das Textfeld (siehe Bild 2) &#8211; das Listenfeld liefert nur noch solche Eintr&auml;ge, die zum angegebenen Suchbegriff passen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1509_002.png\" alt=\"Beispiel f&uuml;r eine Suche &uuml;ber das Textfeld\" width=\"424,5589\" height=\"262,8221\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Beispiel f&uuml;r eine Suche &uuml;ber das Textfeld<\/span><\/b><\/p>\n<h2>Upgrade der Schnellsuche<\/h2>\n<p>Nun stellen wir uns vor, wie das Arbeiten in diesem Formular funktioniert: Der Benutzer gibt einen Suchbegriff ein, bis er den gew&uuml;nschten Eintrag sieht, und klickt diesen dann mit der Maus doppelt an, damit dieser zum Fahrzeug hinzugef&uuml;gt wird (siehe Bild 3). Alternativ kann er auch den Fokus zum Listenfeld wechseln, den gew&uuml;nschten Eintrag markieren und diesen mit der Eingabetaste zu den Ausstattungen des Fahrzeugs hinzuf&uuml;gen. Zus&auml;tzlich k&ouml;nnen wir auch noch daf&uuml;r sorgen, dass das Suchfeld geleert wird und das Listenfeld wieder alle noch verf&uuml;gbaren Eintr&auml;ge anzeigt &#8211; das d&uuml;rfte in den meisten Settings sinnvoll sein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1509_003.png\" alt=\"Ein per Doppelklick hinzugef&uuml;gter Eintrag\" width=\"424,5589\" height=\"248,1684\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ein per Doppelklick hinzugef&uuml;gter Eintrag<\/span><\/b><\/p>\n<p>Wenn der Benutzer nun jedoch das n&auml;chste Ausstattungsmerkmal hinzuf&uuml;gen und dieses dazu suchen m&ouml;chte, muss er den Fokus zun&auml;chst manuell wieder zum Suchen-Textfeld zur&uuml;ckversetzen.<\/p>\n<p>Damit kommt man auf eine ganze Menge Mausklicks und Tastenanschl&auml;ge, bis man alle Ausstattungsmerkmale hinzugef&uuml;gt hat. Und damit kommt das Feature ins Spiel, dass uns die Aufgabe deutlich vereinfacht: Wir wollen den Suchbegriff nun einfach eingeben k&ouml;nnen, ohne dass wir das Listenfeld verlassen m&uuml;ssen! Der Benutzer soll also, w&auml;hrend er durch das Listenfeld navigiert und per Eingabetaste Eintr&auml;ge zu den Ausstattungen hinzuf&uuml;gt, einfach den Inhalt des Suchfeldes aktualisieren und Buchstaben hinzuf&uuml;gen oder entfernen k&ouml;nnen.<\/p>\n<h2>Tastenanschl&auml;ge &uuml;ber das Listenfeld abfangen<\/h2>\n<p>Dazu m&uuml;ssen wir alle Tastenanschl&auml;ge abfangen, die der Benutzer erledigt, w&auml;hrend das Listenfeld den Fokus hat. Dazu verwenden wir das Ereignis <b>Bei Taste <\/b>des Listenfeldes. F&uuml;r dieses hinterlegen wir die Prozedur aus Listing 2. Diese erh&auml;lt mit dem Parameter <b>KeyAscii <\/b>den jeweiligen ASCII-Wert der gedr&uuml;ckten Taste. Davon interessieren uns die folgenden Zeichen inklusive des Leerzeichens, die wir in einer Konstanten namens <b>cStrChars <\/b>speichern:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstAusstattungen_KeyPress(KeyAscii<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSuche<span style=\"color:blue;\"> As String<\/span>\r\n     Const cStrChars<span style=\"color:blue;\"> As String<\/span> = \" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&szlig;&auml;&Auml;&ouml;&Ouml;&uuml;&Uuml;\" _\r\n         & \"1234567890!&sect;$%&\/()=?*+~''#-_.:,;\"\r\n     strSuche = Nz(Me!txtSuche, \"\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">InStr<\/span>(1, cStrChars, Chr(KeyAscii)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtSuche = Me!txtSuche & Chr(KeyAscii)\r\n         KeyAscii = 0\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Select Case KeyAscii\r\n             <span style=\"color:blue;\">Case <\/span>8\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(Me!txtSuche) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                     Me!txtSuche = <span style=\"color:blue;\">Left<\/span>(Me!txtSuche, <span style=\"color:blue;\">Len<\/span>(Me!txtSuche) - 1)\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Case <\/span>vbKeyEscape\r\n                 Me!txtSuche = Null\r\n                 KeyAscii = 0\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Nz(Me!txtSuche, \"\") = strSuche<span style=\"color:blue;\"> Then<\/span>\r\n         Me.TimerInterval = 100\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 Abfangen der Tastenanschl&auml;ge &uuml;ber das Listenfeld<\/span><\/b><\/p>\n<pre>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&szlig;&auml;&Auml;&ouml;&Ouml;&uuml;&Uuml;1234567890!&sect;$%&\/()=?*+~''#-_.:,;<\/pre>\n<p>Wir f&uuml;gen dann den Inhalt des Suchfeldes in die Variable <b>strSuche <\/b>ein. Sollte <b>txtSuche <\/b>den Wert <b>Null <\/b>enthalten, landet eine leere Zeichenkette in <b>strSuche<\/b>.<\/p>\n<p>Wir ermitteln dann mit der <b>Chr<\/b>-Funktion aus dem ASCII-Code das tats&auml;chliche angeklickte Zeichen und pr&uuml;fen, ob sich dieses in den Zeichen aus der Konstanten <b>cStrChars <\/b>befindet. Falls ja, h&auml;ngen wir dieses hingen an den bisherigen Suchbegriff an. Au&szlig;erdem stellen wir den Wert des Parameters <b>KeyAscii <\/b>auf den Wert <b>0 <\/b>ein. Damit sorgen wir daf&uuml;r, dass das eingegebene Zeichen nicht an das Listenfeld weitergegeben wird.<\/p>\n<p>Falls der Benutzer keines der Zeichen in der Konstanten <b>cStrChars <\/b>angeklickt hat, untersuchen wir den Inhalt von <b>KeyASCII <\/b>weiter.<\/p>\n<p>Dabei schauen wir uns im <b>Else<\/b>-Teil der <b>If&#8230;Then<\/b>-Bedingung in einer <b>Select Case<\/b>-Bedingung nur die beiden folgenden F&auml;lle an:<\/p>\n<ul>\n<li>Der Wert <b>8<\/b> steht f&uuml;r das Bet&auml;tigen der L&ouml;schen-Taste. Hier simulieren wir das Bet&auml;tigen der L&ouml;schen-Taste auf dem Inhalt im Textfeld <b>txtSuche <\/b>und l&ouml;schen das letzte Zeichen, sofern das Textfeld nicht bereits leer ist.<\/li>\n<li>Der Wert <b>vbKeyEscape <\/b>steht f&uuml;r das Bet&auml;tigen der Escape-Taste. In diesem Fall leeren wir das Textfeld <b>txtSuche<\/b>.<\/li>\n<\/ul>\n<p>In jedem Fall, bei dem sich der Inhalt des Textfeldes <b>txtSuche <\/b>nun ge&auml;ndert hat, stellen wir die Eigenschaft <b>TimerInterval <\/b>des Formulars auf den Wert <b>100 <\/b>ein. Dadurch sorgen wir daf&uuml;r, dass in 100 Millisekunden das Ereignis <b>Bei Zeitgeber <\/b>ausgel&ouml;st wird. Dies erfolgt deshalb, weil es ein Timing-Problem gibt &#8211; wenn wir die in dieser Prozedur enthaltenen Anweisungen direkt an Ort und Stelle ausf&uuml;hren, erzielen diese nicht die gew&uuml;nschte Wirkung.<\/p>\n<p>Also schauen wir uns den Inhalt der Prozedur <b>Bei Zeitgeber <\/b>an. Diese sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Timer()\r\n     <span style=\"color:blue;\">Dim <\/span>lngAusstattungID<span style=\"color:blue;\"> As Long<\/span>\r\n     lngAusstattungID = Nz(Me!lstAusstattungen, 0)\r\n     <span style=\"color:blue;\">Call<\/span> AusstattungslisteFuellen(Nz(Me!txtSuche, \"\"))\r\n     Me.lstAusstattungen = lngAusstattungID\r\n     Me.TimerInterval = 0\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur liest den aktuell markierten Eintrag des Listenfeldes <b>lstAusstattungen <\/b>in die Variable <b>lngAusstattungID <\/b>ein. Dann ruft sie die Prozedur <b>AusstattungslisteFuellen<\/b> auf, die wir bereits weiter oben vorgestellt haben, und aktualisiert so den Inhalt des Listenfeldes an den ge&auml;nderten Suchbegriff. Dadurch wird der Inhalt des Listenfeldes aktualisiert. Anschlie&szlig;end versucht die Prozedur, das Listenfeld wieder auf den zuvor gespeicherten Wert einzustellen. Sofern dieser Wert noch im Listenfeld angezeigt wird, gelingt dies auch, ansonsten verpufft diese Anweisung einfach. Schlie&szlig;lich stellt die Prozedur den Wert der Eigenschaft <b>TimerInterval <\/b>wieder auf <b>0 <\/b>ein, damit das Ereignis nicht direkt nochmal aufgerufen wird.<\/p>\n<h2>Ausstattung bei Eingabetaste zum Fahrzeug hinzuf&uuml;gen<\/h2>\n<p>Wenn wir schon die Tastenanschl&auml;ge des Benutzers verfolgen &#8211; h&auml;tten wir dann nicht direkt auch die Eingabetaste ber&uuml;cksichtigen k&ouml;nnen, um den aktuell markierten Eintrag zu den Ausstattungen des angezeigten Fahrzeugs hinzuzuf&uuml;gen?<\/p>\n<p>Nein, denn wir k&ouml;nnen diese Eingabe besser mit dem Ereignis <b>Bei Taste ab <\/b>abfangen. Diese l&ouml;st die folgende Ereignisprozedur aus und &uuml;bergibt mit dem Parameter <b>KeyCode <\/b>einen Wert, welcher der bet&auml;tigten Taste entspricht. Diesen Wert untersuchen wir in einer <b>Select Case<\/b>-Bedingung.<\/p>\n<p>F&uuml;r den Fall der Konstanten <b>vbKeyReturn<\/b>, was der Eingabetaste entspricht, speichern wir wiederum den angeklickten Eintrag in der Variablen <b>lngAusstattungID<\/b>. Ist dieser nicht gleich 0, rufen wir die Prozedur <b>AusstattungHinzufuegen <\/b>auf, welche die Ausstattung zum aktuellen Fahrzeug hinzuf&uuml;gt.<\/p>\n<h2>Ergebnis: Schnelles Suchen und Hinzuf&uuml;gen von Eintr&auml;gen<\/h2>\n<p>Damit haben wir das Ziel erreicht. Wir k&ouml;nnen nun, w&auml;hrend das Listenfeld den Fokus hat, Suchbegriffe eingeben, so direkt die angezeigten Eintr&auml;ge filtern, mit der <b>Nach oben<\/b>&#8211; und <b>Nach unten<\/b>-Taste zum gew&uuml;nschten Eintrag navigieren und diesen durch Bet&auml;tigen der Eingabetaste zum aktuellen Fahrzeug hinzuf&uuml;gen.<\/p>\n<h2>Verwendete Technik heruntergebrochen<\/h2>\n<p>Da die hier vorgestellte Technik etwas mit der bestehenden L&ouml;sung der Zuordnung von Ausstattungen zu Fahrzeugen verwoben ist, haben wir die wichtigsten Komponenten allein f&uuml;r das Suchen nach Eintr&auml;gen im Listenfeld nochmals extrahiert, und zwar im Formular <b>frmSchnelleSuche<\/b>.<\/p>\n<p>Hier haben wir nur das Listenfeld und das Textfeld zur Anzeige des aktuellen Suchausdrucks untergebracht (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1509_004.png\" alt=\"Reduziertes Beispiel\" width=\"299,5588\" height=\"414,1237\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Reduziertes Beispiel<\/span><\/b><\/p>\n<p>F&uuml;r das dort enthaltene Listenfeld gleichen Namens haben wir ebenfalls das <b>Bei Taste<\/b>-Ereignis implementiert. Der Code sieht wie in Listing 3 aus. Hier war interessanterweise nicht der Trick mit dem Zeitgeber n&ouml;tig. Wir konnten am Ende der Prozedur ohne Probleme die Prozedur zum F&uuml;llen der Ausstattungsliste aufrufen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstAusstattungen_KeyPress(KeyAscii<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSuche<span style=\"color:blue;\"> As String<\/span>\r\n     Const cStrChars<span style=\"color:blue;\"> As String<\/span> = \" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&szlig;&auml;&Auml;&ouml;&Ouml;&uuml;&Uuml;1234567890!&sect;$%&\/()=?*+~''#-_.:,;\"\r\n     strSuche = Nz(Me!txtSuche, \"\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">InStr<\/span>(1, cStrChars, Chr(KeyAscii)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtSuche = Me!txtSuche & Chr(KeyAscii)\r\n         KeyAscii = 0\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Select Case KeyAscii\r\n             <span style=\"color:blue;\">Case <\/span>8\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(Me!txtSuche) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                     Me!txtSuche = <span style=\"color:blue;\">Left<\/span>(Me!txtSuche, <span style=\"color:blue;\">Len<\/span>(Me!txtSuche) - 1)\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Case <\/span>vbKeyEscape\r\n                 Me!txtSuche = Null\r\n                 KeyAscii = 0\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Nz(Me!txtSuche, \"\") = strSuche<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Dim <\/span>lngAusstattungID<span style=\"color:blue;\"> As Long<\/span>\r\n         lngAusstattungID = Me!lstAusstattungen\r\n         <span style=\"color:blue;\">Call<\/span> AusstattungslisteFuellen(Nz(Me!txtSuche, \"\"))\r\n         Me!lstAusstattungen = lngAusstattungID\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: Prozedur zum Abfangen der Tastenanschl&auml;ge &uuml;ber das Listenfeld, extrahierte Version<\/span><\/b><\/p>\n<p>Dadurch, dass wir hier einfach nur die Listenfeldeintr&auml;ge filtern mussten und in diesem reduzierten Beispiel nicht noch ber&uuml;cksichtigen mussten, welche Ausstattungen dem aktuell angezeigten Fahrzeug bereits zugeordnet waren, ben&ouml;tigen wir nur diese einfache Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AusstattungslisteFuellen( _\r\n         <span style=\"color:blue;\">Optional<\/span> strSuche<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     strSQL = \"SELECT AusstattungID, Ausstattung \" _\r\n         & \"FROM tblAusstattungen \" _\r\n         & \"WHERE Ausstattung LIKE ''*\" & strSuche & \"*'' \" _\r\n         & \"ORDER BY Ausstattung;\"\r\n     Me!lstAusstattungen.RowSource = strSQL\r\n     Me!lstAusstattungen.Value = Null\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Schlie&szlig;lich fehlt noch die Prozedur, falls der Benutzer einmal direkt einen Suchbegriff in das Suchfeld <b>txtSuche <\/b>eingibt. Dieses sieht wie folgt aus und ruft einfach nur die Prozedur <b>AusstattungslisteFuellen <\/b>mit dem aktuellen Inhalt des Textfeldes auf:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtSuche_Change()\r\n     AusstattungslisteFuellen Me!txtSuche.Text\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Zu guter Letzt: Ein Bug im Listenfeld<\/h2>\n<p>Schlie&szlig;lich haben wir im Rahmen der Erstellung der Beispieldatenbank zu diesem Beitrag noch einen Bug oder zumindest ein nicht erwartetes Verhalten von Listenfeldern entdeckt. Dies resultiert darin, dass wir in verschiedenen Prozeduren am Ende den Wert des Listenfeldes auf <b>Null<\/b> eingestellt haben, zum Beispiel in <b>AusstattungslisteFuellen<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AusstattungslisteFuellen( _\r\n         <span style=\"color:blue;\">Optional<\/span> strSuche<span style=\"color:blue;\"> As String<\/span>)\r\n     ...\r\n     Me!lstAusstattungen.RowSource = strSQL\r\n     Me!lstAusstattungen.Value = Null\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Problem ist in diesem Fall Folgendes: Wir haben beispielsweise einen Listenfeldeintrag doppelt angeklickt und dieser wurde dann aus dem Listenfeld entfernt sowie zur Tabelle <b>tblFahrzeugeAusstattungen <\/b>hinzugef&uuml;gt. Wenn wir anschlie&szlig;end versehentlich doppelt in den leeren Bereich des Listenfeldes geklickt haben, wurde der Fehler aus Bild 5 ausgel&ouml;st.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1509_005.png\" alt=\"Fehler beim Klick an die falsche Stelle im Listenfeld\" width=\"424,5589\" height=\"240,9913\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Fehler beim Klick an die falsche Stelle im Listenfeld<\/span><\/b><\/p>\n<p>Dieser resultiert auf folgendem Umstand:<\/p>\n<ul>\n<li>Das Listenfeld hat sich gemerkt, welcher Eintrag zuletzt markiert war.<\/li>\n<li>Beim Doppelklick hat die Prozedur versucht, den zuvor markierten Eintrag zur Tabelle <b>tblFahrzeugeAusstattungen <\/b>hinzuzuf&uuml;gen.<\/li>\n<li>Da f&uuml;r diese Tabelle ein eindeutiger Index festgelegt ist, wurde der gezeigte Fehler ausgel&ouml;st.<\/li>\n<\/ul>\n<p>Um diesen Fehler zu umgehen, stellen wir also immer den Wert des Listenfeldes auf Null ein. Auf diese Weise wird nicht versehentlich der zuletzt markierte Eintrag f&uuml;r eine Aktion verwendet.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag hat eine Schnellsuche f&uuml;r Listenfelder vorgestellt, die nicht allein auf der Eingabe des Suchkriteriums in ein Textfeld basiert. Stattdessen kann der Benutzer direkt vom Listenfeld aus den Suchbegriff eingeben, was Zeit und unn&ouml;tige Mausklicks spart.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SchnellsucheImListenfeldMalAnders.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/F5076047-1EDE-408D-856E-24374B1DECDC\/aiu_1509.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In vielen bisherigen L&ouml;sungen haben wir f&uuml;r die Schnellsuche im Listenfeld oder auch in Unterformularen in der Datenblattansicht ein Textfeld als Suchfeld verwendet. Direkt bei Eingabe eines jeden Zeichens wurde das Suchergebnis aktualisiert. In diesem Beitrag wollen wir einmal eine noch ergonomischere Version vorstellen. Der Unterschied soll so aussehen, dass man den Suchbegriff eingeben kann, w&auml;hrend das Listenfeld den Fokus hat. Es soll also kein Wechseln vom Suchfeld zum Listenfeld und zur&uuml;ck n&ouml;tig sein, wenn man durch die Suche den gew&uuml;nschten Datensatz vorgefunden hat und diesen beispielsweise markieren und beispielsweise durch Bet&auml;tigen der Eingabetaste eine Aktion f&uuml;r diesen Eintrag durchf&uuml;hren m&ouml;chte. Wir zeigen dies am Beispiel aus dem Beitrag &#8222;m:n-Beziehung mit Listenfeld und Datenblatt&#8220; (www.access-im-unternehmen.de\/1510).<\/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":[662024,66042024,44000023],"tags":[],"class_list":["post-55001509","post","type-post","status-publish","format-standard","hentry","category-662024","category-66042024","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>Schnellsuche im Listenfeld mal anders - 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\/Schnellsuche_im_Listenfeld_mal_anders\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schnellsuche im Listenfeld mal anders\" \/>\n<meta property=\"og:description\" content=\"In vielen bisherigen L&ouml;sungen haben wir f&uuml;r die Schnellsuche im Listenfeld oder auch in Unterformularen in der Datenblattansicht ein Textfeld als Suchfeld verwendet. Direkt bei Eingabe eines jeden Zeichens wurde das Suchergebnis aktualisiert. In diesem Beitrag wollen wir einmal eine noch ergonomischere Version vorstellen. Der Unterschied soll so aussehen, dass man den Suchbegriff eingeben kann, w&auml;hrend das Listenfeld den Fokus hat. Es soll also kein Wechseln vom Suchfeld zum Listenfeld und zur&uuml;ck n&ouml;tig sein, wenn man durch die Suche den gew&uuml;nschten Datensatz vorgefunden hat und diesen beispielsweise markieren und beispielsweise durch Bet&auml;tigen der Eingabetaste eine Aktion f&uuml;r diesen Eintrag durchf&uuml;hren m&ouml;chte. Wir zeigen dies am Beispiel aus dem Beitrag &quot;m:n-Beziehung mit Listenfeld und Datenblatt&quot; (www.access-im-unternehmen.de\/1510).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-17T22:07:01+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba\" \/>\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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Schnellsuche im Listenfeld mal anders\",\"datePublished\":\"2024-10-17T22:07:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/\"},\"wordCount\":2209,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/7beba99a1b4c4db684bbe66b235982ba\",\"articleSection\":[\"2024\",\"4\\\/2024\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/\",\"name\":\"Schnellsuche im Listenfeld mal anders - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/7beba99a1b4c4db684bbe66b235982ba\",\"datePublished\":\"2024-10-17T22:07:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/7beba99a1b4c4db684bbe66b235982ba\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/7beba99a1b4c4db684bbe66b235982ba\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Schnellsuche_im_Listenfeld_mal_anders\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schnellsuche im Listenfeld mal anders\"}]},{\"@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":"Schnellsuche im Listenfeld mal anders - 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\/Schnellsuche_im_Listenfeld_mal_anders\/","og_locale":"de_DE","og_type":"article","og_title":"Schnellsuche im Listenfeld mal anders","og_description":"In vielen bisherigen L&ouml;sungen haben wir f&uuml;r die Schnellsuche im Listenfeld oder auch in Unterformularen in der Datenblattansicht ein Textfeld als Suchfeld verwendet. Direkt bei Eingabe eines jeden Zeichens wurde das Suchergebnis aktualisiert. In diesem Beitrag wollen wir einmal eine noch ergonomischere Version vorstellen. Der Unterschied soll so aussehen, dass man den Suchbegriff eingeben kann, w&auml;hrend das Listenfeld den Fokus hat. Es soll also kein Wechseln vom Suchfeld zum Listenfeld und zur&uuml;ck n&ouml;tig sein, wenn man durch die Suche den gew&uuml;nschten Datensatz vorgefunden hat und diesen beispielsweise markieren und beispielsweise durch Bet&auml;tigen der Eingabetaste eine Aktion f&uuml;r diesen Eintrag durchf&uuml;hren m&ouml;chte. Wir zeigen dies am Beispiel aus dem Beitrag \"m:n-Beziehung mit Listenfeld und Datenblatt\" (www.access-im-unternehmen.de\/1510).","og_url":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/","og_site_name":"Access im Unternehmen","article_published_time":"2024-10-17T22:07:01+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Schnellsuche im Listenfeld mal anders","datePublished":"2024-10-17T22:07:01+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/"},"wordCount":2209,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba","articleSection":["2024","4\/2024","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/","url":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/","name":"Schnellsuche im Listenfeld mal anders - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba","datePublished":"2024-10-17T22:07:01+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/7beba99a1b4c4db684bbe66b235982ba"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Schnellsuche_im_Listenfeld_mal_anders\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Schnellsuche im Listenfeld mal anders"}]},{"@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\/55001509","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=55001509"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001509\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}