Was helfen Artikel-, Kunden-, Bestell- und sonstige Daten, wenn Sie diese zwar schön in einem Formular darstellen, aber diese nicht entsprechend filtern können In diesem Artikel zeigen wir Ihnen, wie Sie verschiedene individuelle Filterkriterien mithilfe entsprechender Steuerelemente im Formular festlegen können. Damit filtern Sie dann die in einem Unterformular enthaltenen Daten – in diesem Fall Artikelstammdaten.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1304_FilterkriterienFuerFormulare.mdb.
Basisaufbau
Die Grundlage für die nachfolgend beschriebenen Beispiele zum Filtern von Daten besteht aus einem Haupt- und einem Unterformular. Im Hauptformular befinden sich die Steuerelemente, mit denen Sie die Filterkriterien eingeben, das Unterformular zeigt die zu durchsuchenden Daten an. Alternativ können Sie statt eines Unterformulars auch ein Listenfeld oder ein ListView-Steuerelement verwenden – beides ist mit geringen änderungen verbunden, die wir an anderer Stelle erläutern.
Das Unterformular der Beispieldatenbank heißt frmArtikelFiltern. Stellen Sie für die Eigenschaft Datenherkunft dieses Formulars die Tabelle tblArtikel ein. Ziehen Sie dann alle Felder der Datenherkunft aus der Feldliste in den Detailbereich der Entwurfsansicht des Formulars. Sie brauchen diese nicht ordentlich anzuordnen, denn das Unterformular soll seine Daten ohnehin in der Datenblattansicht anzeigen. Dazu stellen Sie die Eigenschaft Standardansicht des Formulars auf den Wert Datenblatt ein (siehe Bild 1).
Bild 1: Entwurf des Unterformulars mit den zu filternden Daten
Nun müssen Sie das Formular nur noch speichern und schließen, den Rest erledigen wir vom Hauptformular auf.
Das Hauptformular der Beispieldatenbank heißt frmArtikelFiltern und nimmt zunächst nur das Unterformular auf. Wenn Sie das Hauptformular in der Entwurfsansicht geöffnet haben, ziehen Sie das Unterformular aus dem Datenbankfenster beziehungsweise aus dem Navigationsbereich in den Detailbereich des Formulars.
Es darf den Detailbereich komplett ausfüllen, die Steuerelemente zum Einstellen der Filterkriterien platzieren wir später im Formularkopf. Sollten Sie Access 2007 oder neuer verwenden (was ich hoffe), stellen Sie außerdem die Eigenschaften Horizontaler Anker und Vertikaler Anker auf Beide ein. Damit stellen Sie sicher, dass das Unterformular beim Vergrößern des Hauptformulars ebenfalls vergrößert wird.
Da das Hauptformular nicht selbst Daten anzeigt, benötigen wir die entsprechenden Elemente nicht – stellen Sie daher die Eigenschaften Trennlinien, Datensatzmarkierer und Navigationsschaltflächen auf Nein ein. Außerdem legen Sie für die Eigenschaft Automatisch zentrieren den Wert Ja und für Bildlaufleisten den Wert Nein fest.
Das Formular sieht nun wie in Bild 2 aus.
Bild 2: Haupt- und Unterformular in der Entwurfsansicht
Steuerelemente für Filterkriterien
Filterkriterien können Sie mit den verschiedensten Steuerelementen eingeben. In den meisten Fällen ist die Art des Steuerelements bereits vorgegeben. Wenn Sie beispielsweise nach dem Artikelnamen filtern möchten, verwenden Sie dazu ein Textfeld. In diesem können Sie nach Wunsch Platzhalter vordefinieren, damit nach allen Ausdrücken gesucht wird, die mit der angegebenen Zeichenkette beginnen oder enden oder die diese einfach an irgendeiner Stelle enthalten. Oder Sie überlassen dem Benutzer, die notwendigen Platzhalter Sternchen (*) oder Fragezeichen () zu platzieren.
Wenn Sie nach einem Datum filtern, setzen Sie zwei Textfelder ein, um ein Start- und gegebenenfalls noch ein Enddatum für ein Datumsbereich eingeben zu können.
Wenn Sie nach einem Feld filtern möchten, dessen Werte mit einem Nachschlagefeld ausgewählt wurden, wird es bereits interessant. Dann enthält das Nachschlagefeld in der Regel nicht den angezeigten Ausdruck als Wert, sondern den Wert des Primärschlüsselfeldes der Tabelle, aus der die Daten des Nachschlagefeldes stammen. Sie können dann auf zwei Arten nach den Daten dieses Feldes filtern: erstens nach dem Wert der gebundenen Spalte, also dem tatsächlich gespeicherten Wert, oder nach dem angezeigten Wert.
Bei der ersten Variante stellen Sie zur Eingabe des Filterkriteriums ein Kombinationsfeld zur Verfügung, das einfach alle Einträge anbietet, die auch im zu durchsuchenden Feld vorliegen. Wenn Sie also alle Artikel suchen, die zur Kategorie Getränke gehören, würden Sie im Kombinationsfeld zum Filtern den Wert Getränke auswählen.
Es kann natürlich auch sein, dass Sie alle Artikel ermitteln möchten, deren Lieferant mit dem Buchstaben A beginnt. Dies ist etwas aufwendiger, weil wir hier nicht mehr nur die Daten der Tabelle tblArtikel benötigen, sondern auch die Daten der Tabelle tblLieferanten, welche die im Kombinationsfeld angezeigten Daten liefert.
Schließlich gibt es noch die Ja/Nein-Felder. Nach Ja/Nein-Feldern zu filtern, ist komplizierter, als es scheint: Naiverweise mag man davon ausgehen, dass ein einfaches Kontrollkästchen ausreicht, um nach solchen Werten zu filtern. Damit können Sie allerdings normalerweise nur den Wert Ja oder Nein beziehungsweise Wahr oder Falsch einstellen.
Was aber, wenn die zu durchsuchende Datenherkunft alle Datensätze liefern soll, also sowohl solche mit dem Wert Ja als auch die mit dem Wert Nein
Kontrollkästchen besitzen zwar den sogenannten Dreifachstatus, aber der ist eher weniger intuitiv zu bedienen (mit drei Mausklicks durchlaufen Sie dabei die drei Werte -1 (Ja), 0 (Nein) und Null, wobei man Null mit Alle anzeigen belegen könnte.
Alternativ könnte man die drei Werte Ja, Nein und Alle auch mit einem Kombinationsfeld oder mit einer Optionsgruppe abdecken.
Bei Zahlenwerten gibt es schließlich auch verschiedene Möglichkeiten: Entweder Sie prüfen nur auf exakte übereinstimmungen oder Sie verwenden auch hier, genau wie beim Datum, zwei Textfelder zur Eingabe von Wertebereichen.
Natürlich kann es auch sein, dass ein beliebiges Feld mit Texten, Zahlen oder Datums-angaben viele gleichartige Werte enthält.
In diesem Fall ist es vielleicht sinnvoll, statt eines Textfeldes ein Kombinationsfeld zum Filtern einzusetzen.
Diese könnte dann alle möglichen Werte in einer sinnvollen Reihenfolge zur Auswahl bereitstellen, um schnell die betroffenen Datensätze zu ermitteln – so sparen Sie dem Benutzer sogar noch die Eingabe des Suchbegriffs.
Filtern nach Textfeldern
Beginnen wir mit dem Filtern der Datensätze nach dem Inhalt eines Textfeldes, in diesem Fall Artikelname.
Zur Eingabe des Vergleichswertes legen Sie im Formularkopf ein Textfeld namens txtArtikelnameFilter an (siehe Bild 3).
Bild 3: Textfeld zur Eingabe eines Filterkriteriums für den Artikelnamen
Es gibt nun ein paar Fragen zu klären. Die erste ist: Soll der Benutzer selbst Platzhalter eingeben können oder möchten Sie entsprechende Elemente zur Benutzeroberfläche hinzufügen
Eine weitere Möglichkeit wäre, standardmäßig bestimmte Platzhalter festzulegen, um beispielsweise alle Einträge zu filtern, deren Artikelname mit dem eingegebenen Ausdruck beginnt oder deren Artikelnamen den Ausdruck an beliebiger Stelle enthält.
Die zweite Frage ist: Wann soll gefiltert werden – nach der Eingabe eines jeden Zeichens oder erst nach Abschluss der Eingabe etwa durch Betätigen der Eingabetaste Wir schauen uns beide Varianten an.
Einfacher Filter
Am einfachsten ist es, den Benutzer mit einem Textfeld zu konfrontieren, in das er den Vergleichswert für das zu filternde Feld einträgt. Wenn er die Eingabetaste betätigt, soll eine Ereignisprozedur ausgelöst werden, welche das Recordset des Unterformulars mit einem entsprechenden Filter versieht.
Ein passendes Ereignis für diesen Fall ist Nach Aktualisierung. Wechseln Sie also in den Entwurf des Formulars, markieren Sie das Textfeld txtArtikelnameFilter und wählen Sie für die Eigenschaft Nach Aktualisierung den Wert [Ereignisprozedur] aus.
Klicken Sie dann auf die Schaltfläche mit den drei Punkten (…), damit Access die Prozedur txtArtikelnameFilter_AfterUpdate anlegt. Diese ergänzen Sie wie in Bild 4 mit den folgenden Zeilen:
Bild 4: Diese Prozedur wird nach dem Aktualisieren des Inhalts des Textfeldes ausgelöst.
With Me!sfmArtikelFiltern.Form .Filter = "Artikelname = '" & Me!txtArtikelnameFilter & "'" .FilterOn = True End With
Beim Definieren des Filterkriteriums, dass direkt der Filter-Eigenschaft des Unterformulars zugewiesen wird, gibt es nur wenig zu beachten: Es besteht aus dem Feldnamen, nach dem gefiltert werden soll, dem Vergleichsoperator (hier dem Gleichheitszeichen) und dem Vergleichswert. Bei Vergleichen mit Feldern, die Texte enthalten, müssen Sie den Vergleichswert in Anführungszeichen setzen. Dann setzt sich der Vergleichsausdruck so zusammen:
"Artikelname = '" & Me!txtArtikelnameFilter & "'"
Der Vergleichsausdruck muss insgesamt in Anführungszeichen eingefasst werden, da er als Literal an die Filter-Eigenschaft übergeben wird. Da der Vergleichsausdruck seinerseits in Anführungszeichen eingefasst werden muss, haben wir ein kleines Problem. Sie können es nämlich nicht einfach in die bereits in Anführungszeichen eingefassten Teile des Vergleichsausdrucks integrieren:
"Artikelname = "" & Me!txtArtikelnameFilter & """
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: