{"id":55001071,"date":"2017-02-01T00:00:00","date_gmt":"2020-05-14T13:41:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1071"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Lookupkombinationsfelder_nach_Texten_filtern","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/","title":{"rendered":"Lookupkombinationsfelder nach Texten filtern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aufbau des Beispielformulars<\/span><\/b><\/p>\n<p><b>Wenn Sie die Datens&auml;tze eines Unterformulars in der Datenblattansicht filtern wollen, gelingt die Eingabe in Text-, Zahlen- und Datumsfelder recht einfach. Wenn Sie jedoch ein Suchfeld f&uuml;r die Werte eines Lookup-Kombinationsfeldes programmieren wollen, sto&szlig;en Sie schnell an die Grenzen. Sie k&ouml;nnen die Feldinhalte n&auml;mlich nicht einfach mit den in den Feldern angezeigten Werten vergleichen, denn diese stammen ja aus den Lookup-Tabellen, mit denen solche Steuerelemente gef&uuml;llt werden. Dieser Beitrag zeigt, wie auch das Filtern nach den Werten in Kombinationsfeldern zum Kinderspiel wird.<\/b><\/p>\n<p>Als Erstes zeigen wir Ihnen, wie es nicht gelingt und was somit das Problem beim Filtern nach den Inhalten von Lookup-Kombinationsfeldern ist. In unserem Beispielformular haben wir ein Textfeld zur Eingabe des Suchbegriffs, eine Suchen-Schaltfl&auml;che namens <b>cmdSuchen <\/b>sowie ein Unterformular namens <b>sfmArtikel_Lookupfilter <\/b>angelegt (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_001.png\" alt=\"Aufbau des Beispielformulars\" width=\"499,6607\" height=\"405,5344\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aufbau des Beispielformulars<\/span><\/b><\/p>\n<p>In einem ersten, naiven Ansatz wollen wir die Suche wie f&uuml;r ein normales Feld des Datentyps String durchf&uuml;hren. Die dazugeh&ouml;rige Prozedur sieht dann wie in Listing 1 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdSuchen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strLieferant<span style=\"color:blue;\"> As String<\/span>\r\n     strLieferant = Me!txtLieferant\r\n     Me!sfmArtikel_Lookupfilter.Form.Filter = \"LieferantID LIKE ''\" & strLieferant & \"''\"\r\n     Me!sfmArtikel_Lookupfilter.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Erster Ansatz zum Filtern der angezeigten Werte im Kombinationsfeld<\/span><\/b><\/p>\n<p>Das Ergebnis sieht wie in Bild 2 aus: Es liefert keinerlei Datens&auml;tze, obwohl das Kombinationsfeld doch einige Werte anzeigt, die mit dem Suchbegriff <b>E* <\/b>beginnen. Eine Analyse des resultierenden Filterausdrucks l&auml;sst eine Vorahnung aufkommen. Das Feld <b>LieferantID <\/b>enth&auml;lt doch nur Zahlenwerte<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_002.png\" alt=\"Erster, erfolgloser Anlauf\" width=\"649,559\" height=\"326,8376\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Erster, erfolgloser Anlauf<\/span><\/b><\/p>\n<pre>LieferantID LIKE ''E*''<\/pre>\n<p>Es ist also klar: Auch, wenn das Kombinationsfeld die Hersteller anzeigt, sind dies nicht die Werte des an das Steuerelement gebundenen Feldes <b>LieferantID<\/b>. <b>Lieferant-ID <\/b>gibt lediglich an, mit welchem Datensatz der Tabelle <b>tblLieferanten <\/b>der aktuelle Datensatz der Tabelle <b>tblArtikel <\/b>verkn&uuml;pft ist. Das Feld enth&auml;lt also, wenn wie in diesem Fall referenzielle Integrit&auml;t definiert ist, mit Sicherheit nur Zahlenwerte.<\/p>\n<p>Sie k&ouml;nnten nun den Wert <b>1 <\/b>als Suchbegriff in das Textfeld <b>txtFirma <\/b>eingeben. Das Ergebnis w&auml;re f&uuml;r den Benutzer eher noch verwirrender als das vorherige: Es erscheinen n&auml;mlich alle Datens&auml;tze mit dem Lieferanten <b>Exotic Liquids<\/b>.<\/p>\n<p>Dieser hat wiederum, wie Sie vielleicht erahnen, den Wert <b>1 <\/b>im Feld <b>LieferantID<\/b> der Tabelle <b>tblLieferanten<\/b>, also zeigt das Unterformular nach dem Filtern alle Datens&auml;tze der Tabelle <b>tblArtikel <\/b>an, die diesem Lieferanten zugeordnet sind.<\/p>\n<p>Noch verwirrender wird es, wenn Sie beispielsweise den Wert <b>1* <\/b>eingeben. Dann erscheint das Ergebnis aus Bild 3.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_003.png\" alt=\"Alle Artikel, die zu einem Lieferanten geh&ouml;ren, der mit einer LieferantID wie 1* beginnt\" width=\"549,6265\" height=\"266,8477\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Alle Artikel, die zu einem Lieferanten geh&ouml;ren, der mit einer LieferantID wie 1* beginnt<\/span><\/b><\/p>\n<p>Der Benutzer w&uuml;rde dies nun gar nicht mehr einordnen k&ouml;nnen, aber wir wissen: Das sind alle Artikel, deren Feld <b>Lieferant-ID <\/b>einen Wert enth&auml;lt, der mit <b>1 <\/b>beginnt.<\/p>\n<h2>Filtern nach dem angezeigten Wert<\/h2>\n<p>Damit wenden wir uns dem eigentlichen Ziel dieses Beitrags zu: Wir wollen ja nicht nach den Fremdschl&uuml;sselwerten filtern, sondern nach dem Wert, der im Kombinationsfeld angezeigt wird. Hier gibt es verschiedene Ans&auml;tze, die wir uns nun ansehen.<\/p>\n<p>Im Grunde ist es ganz einfach: Wir m&uuml;ssen lediglich die Abfrage in der Ereignisprozedur der Schaltfl&auml;che <b>cmdSuchen<\/b> anpassen, um das Ergebnis aus Bild 4 zu erhalten! Die entsprechende Zeile sieht dann wie folgt aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_005.png\" alt=\"Diese Artikel wollen wir sehen.\" width=\"549,6265\" height=\"266,8477\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Diese Artikel wollen wir sehen.<\/span><\/b><\/p>\n<pre>Me!sfmArtikel_Lookupfilter.Form.Filter = _\r\n    &amp; \"LieferantID IN (SELECT LieferantID FROM tblLieferanten WHERE Firma LIKE ''\" & strLieferant & \"'')\"<\/pre>\n<p>Der nackte SQL-Ausdruck etwa nach Eingabe des Suchausdrucks <b>E* <\/b>sieht wie folgt aus:<\/p>\n<pre>LieferantID IN (\r\n     SELECT LieferantID \r\n     FROM tblLieferanten \r\n     WHERE Firma LIKE ''E*''\r\n)<\/pre>\n<p>Was bedeutet das nun Wir verwenden hier immer noch das Feld <b>LieferantID <\/b>als Vergleichsfeld. Allerdings unterscheidet sich der Rest gravierend von der vorherigen Version.<\/p>\n<p>Der erste Unterschied ist, dass wir nicht den Operator <b>LIKE <\/b>(oder auch das Gleichheitszeichen) verwenden, sondern den <b>IN<\/b>-Operator.<\/p>\n<p>Dieser erwartet eine Menge von einem oder mehreren Vergleichswerten, die immer in Klammern angegeben werden m&uuml;ssen. Die Vergleichswerte k&ouml;nnen als kommaseparierte Liste angegeben werden, also etwa so: <\/p>\n<pre>IN (1, 2, 3)<\/pre>\n<p>In diesem Fall ist die Menge der Vergleichswerte jedoch dynamisch und von den Werten der Tabelle <b>tblLieferanten <\/b>abh&auml;ngig, daher nutzen wir in Klammern eine <b>SELECT<\/b>-Abfrage:<\/p>\n<pre>SELECT LieferantID FROM tblLieferanten WHERE Firma LIKE ''E*''<\/pre>\n<p>Die Abfrage liefert alle Werte des Feldes <b>LieferantID <\/b>der Tabelle <b>tblLieferanten<\/b>, deren Feld <b>Firma <\/b>mit dem Buchstaben <b>E <\/b>beginnt (<b>LIKE E*<\/b>) &#8211; hier steckt also nun ein weiterer Vergleichsoperator, der diesmal festlegt, mit welchem Suchbegriff die im Kombinationsfeld angezeigten Werte verglichen werden sollen.<\/p>\n<p><!--30percent--><\/p>\n<p>Dies ist die einfachste L&ouml;sung, um ein Lookup-Kombinationsfeld nach den angezeigten Werten zu filtern.<\/p>\n<h2>Variante mit erweiterter Datenherkunft<\/h2>\n<p>Die zweite Variante setzt ein wenig Vorarbeit voraus, daf&uuml;r ist die Gestaltung des Filter-Kriteriums wesentlich einfacher. Wir verwenden hier im Formular <b>frmArtikel_Look-upfilter_II <\/b>die Abfrage aus Bild 5 als Datenherkunft des Unterformulars.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_004.png\" alt=\"Erweiterte Datenherkunft des Formulars\" width=\"424,7115\" height=\"296,0952\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Erweiterte Datenherkunft des Formulars<\/span><\/b><\/p>\n<p>Der Unterschied zum Einsatz der reinen Tabelle <b>tblArtikel <\/b>ist, dass wir die Tabelle <b>tblLieferanten <\/b>noch hinzugef&uuml;gt und aus dieser Tabelle das Feld <b>Firma <\/b>in das Entwurfsraster gezogen haben.<\/p>\n<p>Im Entwurf des Unterformulars m&uuml;ssen wir allerdings keine &auml;nderungen vornehmen, denn wir wollen die <b>Firma <\/b>aus der Tabelle <b>tblLieferanten <\/b>ja nicht direkt in einem Textfeld, sondern nach wie vor als Kombinationsfeld anzeigen.<\/p>\n<p>Hinweis: Der Name des Unterformular-Steuerelements im Formular <b>frmArtikel_Lookupfilter_II <\/b>lautet nach wie vor <b>sfmArtikel_Lookupfilter<\/b>, aber es zeigt das neue Unterformular <b>frmArtikel_Lookupfilter_II <\/b>an.<\/p>\n<p>Die Ereignisprozedur, die durch die Schaltfl&auml;che <b>cmdSuchen <\/b>ausgel&ouml;st wird, sieht nun so aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdSuchen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strLieferant<span style=\"color:blue;\"> As String<\/span>\r\n     strLieferant = Me!txtLieferant\r\n     Me!sfmArtikel_Lookupfilter.Form.Filter =  \"Firma LIKE ''\" & strLieferant & \"''\"\r\n     Me!sfmArtikel_Lookupfilter.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Der Filterausdruck sieht nun nur noch so aus:<\/p>\n<pre>\"Firma LIKE ''\" & strLieferant & \"''\"<\/pre>\n<p>Dies ist nun so einfach, weil das Feld <b>Firma <\/b>ja nun zur Datenherkunft des Unterformulars geh&ouml;rt.<\/p>\n<h2>Flexible Suche<\/h2>\n<p>Nun wollen wir den Code noch so anpassen, dass wir den Filterausdruck nicht mehr manuell erstellen m&uuml;ssen, sondern nur noch das Kombinationsfeld und den Vergleichswert angeben m&uuml;ssen.<\/p>\n<p>Dazu verwenden wir eine Hilfsfunktion, und zwar die aus Listing 2.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>LookupSearchstring(cbo<span style=\"color:blue;\"> As <\/span>ComboBox, strValue<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBoundColumn<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>fldBound<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBoundTable<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strForeignKey<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strFieldCriteria<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strColumnWidths()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>dblColumnwidth<span style=\"color:blue;\"> As Double<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> rst = cbo.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> fldBound = rst.Fields(cbo.BoundColumn - 1)\r\n     strBoundTable = fldBound.SourceTable\r\n     strBoundColumn = fldBound.SourceField\r\n     strForeignKey = cbo.ControlSource\r\n     strColumnWidths = <span style=\"color:blue;\">Split<\/span>(cbo.ColumnWidths, \";\")\r\n     For i = 0 To cbo.ColumnCount - 1\r\n         dblColumnwidth = 1\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         dblColumnwidth = <span style=\"color:blue;\">Split<\/span>(cbo.ColumnWidths, \";\")(i)\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         <span style=\"color:blue;\">If <\/span>dblColumnwidth &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Exit For<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     strFieldCriteria = rst.Fields(i).Name\r\n     strSQL = strForeignKey & \" IN (SELECT \" & strBoundColumn & \" FROM \" & strBoundTable & \" WHERE \" _\r\n         & strFieldCriteria & \" LIKE ''\" & strValue & \"'')\"\r\n     LookupSearchstring = strSQL\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Flexibles Suchen von Zeichenketten in der Datensatzherkunft von Kombinationsfeldern<\/span><\/b><\/p>\n<p>Um die Suche auszuprobieren, legen wir eine zweite Schaltfl&auml;che namens <b>cmdSucheFlexibel <\/b>an, f&uuml;r die wir die folgende Ereignisprozedur hinterlegen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdSucheFlexibel_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strLieferant<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strSearchstring<span style=\"color:blue;\"> As String<\/span>\r\n     strLieferant = Me!txtLieferant\r\n     strSearchstring = LookupSearchstring(Me! sfmArtikel_Lookupfilter.Form!LieferantID, strLieferant)\r\n     Me!sfmArtikel_Lookupfilter.Form.Filter = strSearchstring\r\n     Me!sfmArtikel_Lookupfilter.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Funktion <b>LookupSearchstring <\/b>soll uns also den Filterausdruck liefern, den wir dann nur noch der Eigenschaft <b>Filter <\/b>des Unterformulars zuweisen m&uuml;ssen.<\/p>\n<p>Dazu &uuml;bergeben wir der Funktion zwei Parameter: einen Verweis auf das betroffene Kombinationsfeld und den Suchbegriff.<\/p>\n<p>Das Ziel der Funktion ist es, die Datenherkunft des Kombinationsfeldes zu analysieren und daraus folgende Eigenschaften zu ermitteln:<\/p>\n<ul>\n<li>Name des Feldes der gebundenen Spalte<\/li>\n<li>Name des angezeigten Feldes<\/li>\n<li>Name der Tabelle der Datenherkunft<\/li>\n<\/ul>\n<p>Diese Informationen ben&ouml;tigen wir, um den Filterausdruck zusammenzustellen. Die Funktion referenziert zun&auml;chst das Recordset des Kombinationsfeldes mit der Objektvariablen <b>rst<\/b>.<\/p>\n<p>Dann liest sie den Namen der gebundenen Spalte des Kombinationsfeldes aus, in der Regel das Prim&auml;rschl&uuml;sselfeld. Den Namen der gebundenen Spalte erhalten wir &uuml;ber die Position, welche die Eigenschaft <b>BoundColumn <\/b>des Kombinationsfeldes liefert (<b>cbo.BoundColumn &#8211; 1<\/b>), in der <b>Fields<\/b>-Auflistung des Recordsets. In unserem Beispiel hat <b>BoundColumn <\/b>den Wert <b>1<\/b>. Ziehen wir hier <b>1 <\/b>ab, erhalten wir den Indexwert <b>0 <\/b>&#8211; die Position des Feldes <b>LieferantID<\/b>.<\/p>\n<p>Mit dem gebundenen Feld ausgestattet ermitteln wir die gebundene Tabelle (aus der Eigenschaft <b>SourceTable <\/b>des Feldes der gebundenen Spalte) sowie den Namen des gebundenen Feldes in der Tabelle (mit der Eigenschaft <b>SourceField<\/b>).<\/p>\n<p>Den Namen des als Fremdschl&uuml;ssel verwendeten Feldes ermitteln wir &uuml;ber die Eigenschaft <b>ControlSource <\/b>des Kombinationsfeldes, in diesem Fall <b>LieferantID<\/b> (das Fremschl&uuml;sselfeld muss nicht zwingend den gleichen Namen wie das Prim&auml;rschl&uuml;sselfeld der Lookuptabelle aufweisen, aber hier ist es der Fall).<\/p>\n<p>Schlie&szlig;lich ermitteln wir den Namen des ersten Feldes, dessen Inhalt im Kombinationsfeld angezeigt wird. Meist legen Sie mit einer Einstellung der Eigenschaften <b>Spaltenbreiten <\/b>und <b>Spaltenanzahl <\/b>fest, dass die gebundene Spalte ausgeblendet wird und welche Spalte angezeigt werden soll. Meist enth&auml;lt die Datensatzherkunft nur zwei Felder, n&auml;mlich die gebundene Spalte und die anzuzeigende Spalte.<\/p>\n<p>Dann reicht es, die Eigenschaft <b>Spaltenanzahl <\/b>auf den Wert <b>2 <\/b>und <b>Spaltenbreiten <\/b>auf den Wert <b>0 <\/b>einzustellen &#8211; das zweite Feld nimmt dann automatisch die komplette Breite des Kombinationsfeldes ein.<\/p>\n<p>Manchmal enth&auml;lt das Kombinationsfeld aber auch mehr als zwei Spalten. Dann kann <b>Spaltenbreiten <\/b>auch Werte wie <b>0cm;5cm;0cm;0cm <\/b>enthalten. Die folgenden Zeilen ermitteln in jedem Fall die erste angezeigte Spalte. Dazu speichert die Funktion die Auflistung aus der Eigenschaft <b>Spaltenbreiten <\/b>in einem Array namens <b>strColumnWidths()<\/b>.<\/p>\n<p>Eine <b>For&#8230;Next<\/b>-Schleife durchl&auml;uft alle Indexwerte f&uuml;r die Anzahl der Spalten des Kombinationsfeldes, die wir mit <b>ColumnCount <\/b>ermitteln (und um <b>1 <\/b>vermindern, da wir mit dem nullbasierten Index arbeiten wollen).<\/p>\n<p>In dieser Schleife tragen wir jeweils die Spaltenbreite aus dem Array <b>strColumnWidths <\/b>in die Variable <b>dblColumnWidths <\/b>ein. Dies f&uuml;hrt, wenn wir zwar zwei Spalten haben, aber die Eigenschaft <b>Spaltenbreiten <\/b>nur eine Spaltenbreite enth&auml;lt (<b>0cm<\/b>), zu einem Fehler, weshalb wir die eingebaute Fehlerbehandlung deaktivieren und zuvor den Wert der Eigenschaft <b>dblColumnWidth <\/b>auf <b>1 <\/b>einstellen.<\/p>\n<p>So enth&auml;lt <b>dblColumnWidth <\/b>nicht nur nach dem ersten Auftreten einer Spaltenbreite gr&ouml;&szlig;er als 0cm einen anderen Wert als <b>0<\/b>, sondern auch dann, wenn keine explizite Spaltenbreite f&uuml;r die aktuell untersuchte Spalte mehr angegeben ist. Wir ermitteln also auf jeden Fall die erste Spalte, deren Spaltenbreite gr&ouml;&szlig;er als <b>0<\/b> ist &#8211; auch wenn die Breite nicht explizit angegeben wurde. In diesem Fall verl&auml;sst die Funktion die Schleife.<\/p>\n<p>Die folgende Anweisung speichert dann den Namen der <b>Fields<\/b>-Auflistung des Recordsets f&uuml;r den zuvor ermittelten Index in der Variablen <b>strFieldCriteria<\/b>. Dann folgt das Zusammenstellen des SQL-Ausdrucks mit den Werten der Variablen <b>strBoundColumn<\/b>, <b>strBoundTable<\/b>, <b>strFieldCriteria <\/b>und <b>strValue<\/b>, der etwa wie folgt aussehen k&ouml;nnte:<\/p>\n<pre>LieferantID IN (\r\n     SELECT Firma \r\n     FROM tblLieferanten \r\n     WHERE Firma LIKE ''E*''\r\n)<\/pre>\n<p>Dieser Ausdruck wird dann als Funktionswert an die aufrufende Routine zur&uuml;ckgegeben. Das Ergebnis sieht dann genau wie gew&uuml;nscht aus, wie Bild 6 zeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_1071_006.png\" alt=\"Filtern nach dem Feld LieferantID mit flexibler Ermittlung des Filterausdrucks\" width=\"700\" height=\"212,1453\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Filtern nach dem Feld LieferantID mit flexibler Ermittlung des Filterausdrucks<\/span><\/b><\/p>\n<h2>Einsatzzweck<\/h2>\n<p>Der Sinn dieser Funktion ist, dass wir nun nur noch eine Funktion mit zwei leicht verst&auml;ndlichen Parametern aufrufen m&uuml;ssen, statt eine doch gerade f&uuml;r unerfahrene Entwickler komplizierte Abfrage von Hand zusammenzustellen. Sie k&ouml;nnen diese Funktion nat&uuml;rlich f&uuml;r verschiedene Kombinationsfelder im gleichen Formular einsetzen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag hat mehrere M&ouml;glichkeiten aufgezeigt, wie Sie die Datens&auml;tze eines Unterformulars nach dem angezeigten Wert von Kombinationsfeldern anzeigen k&ouml;nnen.<\/p>\n<p>Die zuletzt vorgestellte Funktion dient als Basis f&uuml;r eine Erweiterung der L&ouml;sung des Beitrags <b>Schneller Filter <\/b>(<b>www.access-im-unternehmen.de\/1072<\/b>).<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Lookupkombinationsfelder.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/4741A170-4BF5-4092-A361-366CE117530A\/aiu_1071.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie die Datens&auml;tze eines Unterformulars in der Datenblattansicht filtern wollen, gelingt die Eingabe in Text-, Zahlen- und Datumsfelder recht einfach. Wenn Sie jedoch ein Suchfeld f&uuml;r die Werte eines Lookup-Kombinationsfeldes programmieren wollen, sto&szlig;en Sie schnell an die Grenzen. Sie k&ouml;nnen die Feldinhalte n&auml;mlich nicht einfach mit den in den Feldern angezeigten Werten vergleichen, denn diese stammen ja aus den Lookuptabellen, mit denen solche Steeuerelemente gef&uuml;llt werden. Dieser Beitrag zeigt, wie auch das Filtern nach den Werten in Kombinationsfeldern zum Kinderspiel wird.<\/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":[66012017,662017,44000023],"tags":[],"class_list":["post-55001071","post","type-post","status-publish","format-standard","hentry","category-66012017","category-662017","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>Lookupkombinationsfelder nach Texten filtern - 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\/Lookupkombinationsfelder_nach_Texten_filtern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lookupkombinationsfelder nach Texten filtern\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie die Datens&auml;tze eines Unterformulars in der Datenblattansicht filtern wollen, gelingt die Eingabe in Text-, Zahlen- und Datumsfelder recht einfach. Wenn Sie jedoch ein Suchfeld f&uuml;r die Werte eines Lookup-Kombinationsfeldes programmieren wollen, sto&szlig;en Sie schnell an die Grenzen. Sie k&ouml;nnen die Feldinhalte n&auml;mlich nicht einfach mit den in den Feldern angezeigten Werten vergleichen, denn diese stammen ja aus den Lookuptabellen, mit denen solche Steeuerelemente gef&uuml;llt werden. Dieser Beitrag zeigt, wie auch das Filtern nach den Werten in Kombinationsfeldern zum Kinderspiel wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-14T13:41:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Lookupkombinationsfelder nach Texten filtern\",\"datePublished\":\"2020-05-14T13:41:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/\"},\"wordCount\":1713,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/ec787d7eeaf44fba849b5d3693d3d303\",\"articleSection\":[\"1\\\/2017\",\"2017\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/\",\"name\":\"Lookupkombinationsfelder nach Texten filtern - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/ec787d7eeaf44fba849b5d3693d3d303\",\"datePublished\":\"2020-05-14T13:41:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/ec787d7eeaf44fba849b5d3693d3d303\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/ec787d7eeaf44fba849b5d3693d3d303\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Lookupkombinationsfelder_nach_Texten_filtern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lookupkombinationsfelder nach Texten filtern\"}]},{\"@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":"Lookupkombinationsfelder nach Texten filtern - 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\/Lookupkombinationsfelder_nach_Texten_filtern\/","og_locale":"de_DE","og_type":"article","og_title":"Lookupkombinationsfelder nach Texten filtern","og_description":"Wenn Sie die Datens&auml;tze eines Unterformulars in der Datenblattansicht filtern wollen, gelingt die Eingabe in Text-, Zahlen- und Datumsfelder recht einfach. Wenn Sie jedoch ein Suchfeld f&uuml;r die Werte eines Lookup-Kombinationsfeldes programmieren wollen, sto&szlig;en Sie schnell an die Grenzen. Sie k&ouml;nnen die Feldinhalte n&auml;mlich nicht einfach mit den in den Feldern angezeigten Werten vergleichen, denn diese stammen ja aus den Lookuptabellen, mit denen solche Steeuerelemente gef&uuml;llt werden. Dieser Beitrag zeigt, wie auch das Filtern nach den Werten in Kombinationsfeldern zum Kinderspiel wird.","og_url":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-14T13:41:00+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Lookupkombinationsfelder nach Texten filtern","datePublished":"2020-05-14T13:41:00+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/"},"wordCount":1713,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303","articleSection":["1\/2017","2017","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/","url":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/","name":"Lookupkombinationsfelder nach Texten filtern - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303","datePublished":"2020-05-14T13:41:00+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/ec787d7eeaf44fba849b5d3693d3d303"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Lookupkombinationsfelder_nach_Texten_filtern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Lookupkombinationsfelder nach Texten filtern"}]},{"@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\/55001071","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=55001071"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001071\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}