Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
In den ersten beiden Teilen dieser Artikelreihe haben Sie erfahren, wie Sie Felder der verschiedenen Datentypen filtern. Nun geht es ans Eingemachte: Wir filtern nach dem Inhalt von Kombinationsfeldern. Eigentlich könnte dies ganz leicht sein: Der Benutzer wählt einfach eine Wert des Kombinationsfeldes aus und die Datenherkunft wird nach dem Wert im entsprechenden Feld gefiltert. Allerdings kann es ja auch geschehen, dass man nicht nach dem Wert des gebundenen Feldes im Kombinationsfeld, sondern nach dem angezeigten Wert filtern möchte. Wir schauen uns beide Fälle an.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1306_FilterkriterienFuerFormulare.mdb.
Beispielformular
Das Beispielformular sieht wie in Bild 1 aus. Es heißt frmFilternNachKombinationsfeld und enthält im Formularkopf ein Kombinationsfeld namens cboLieferantNachID und ein Textfeld namens txtLieferantNachName.
Bild 1: Formular zum Filtern nach Kombinationsfeldern und ihren Inhalten
Im Detailbereich haben wir ein Unterformular namens frmFilternNachKombinationsfeld eingerichtet, das die Daten der Tabelle tblArtikel anzeigt.
Filtern nach der gebundenen Spalte
Das Kombinationsfeld cboLieferantNachID soll nach der Auswahl eines Eintrags direkt diejenigen Artikel im Unterformular anzeigen, die vom angegebenen Lieferanten geliefert werden. Dazu muss das Kombinationsfeld allerdings erst einmal alle Lieferanten anzeigen. Diese können Sie auf zwei Arten beziehen:
- Erstens über die Tabelle tblLieferanten. Dies würde alle Lieferanten liefern, die überhaupt vorhanden sind.
- Zweitens über eine Abfrage, welche die Tabellen tblArtikel und tblLieferanten verknüpft. Auf diese Weise würde das Kombinationsfeld nur diejenigen Lieferanten anzeigen, die aktuell einem Artikel zugeordnet sind.
Da beide Varianten interessant sind, schauen wir uns beide an. Im ersten Fall weisen Sie der Eigenschaft Datensatzherkunft des Kombinationfeldes die folgende SQL-Anweisung zu:
SELECT LieferantID, Firma FROM tblLieferanten ORDER BY Firma;
Die Datensätze der Tabelle tblLieferanten werden durch die Klausel ORDER BY Firma direkt nach dem Firmennamen des Lieferanten sortiert.
Damit das Kombinationsfeld nur die Werte des zweiten Feldes anzeigt, aber den Wert aus dem Feld LieferantID aus dem ersten Feld als gebundene Spalte verwendet, stellen Sie noch die beiden folgenden Eigenschaften ein:
- Spaltenanzahl: 2
- Spaltenbreiten: 0cm
Das Filtern selbst ist relativ leicht – Sie brauchen nur eine Ereignisprozedur für die Ereigniseigenschaft Nach Aktualisierung des Formulars zu hinterlegen, welche den Filterausdruck des Unterformulars einstellt. Diese Ereignisprozedur finden Sie in Listing 1.
Private Sub cboLieferantNachID_AfterUpdate() With Me!sfmFilternNachKombinationsfeld.Form .Filter = "LieferantID = " & Me!cboLieferantNachID .FilterOn = True End With End Sub
Listing 1: Lieferanten nach ID filtern
Nach der Auswahl eines der Einträge aus dem Kombinationsfeld zeigt das Unterformular nun bereits alle verfügbaren Einträge an (siehe Bild 2).
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo