Schnellsuche im Listenfeld

Listenfelder eignen sich prima zur Anzeige von Daten in Listenform – vor allem, wenn der Benutzer diese Daten nicht an Ort und Stelle ändern soll. Im Gegensatz zur Datenblattansicht lässt es aber auch eigene Filter- oder Sortiermöglichkeiten vermissen. Dieser Artikel zeigt, wie Sie zumindest eine komfortable Suche nach bestimmten Einträgen realisieren.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1205_Schnellsuche.mdb.

Schnellsuche

Warum heißt die in diesem Artikel vorgestellte Suchfunktion eigentlich Schnellsuche Nun: Im Gegensatz zu einer Suche, bei der Sie den Suchbegriff in ein Suchfeld eingeben und die Suche dann etwa durch Betätigen der Eingabetaste oder per Klick auf eine entsprechende Schaltfläche anstoßen, soll die Suche hier nach Eingabe jedes einzelnen Zeichens ausgelöst werden. Sprich: Wenn Sie für eine Suche im Feld Artikelname der Tabelle tblArtikel den Buchstaben A eingeben, soll das Listenfeld gleich alle Artikel anzeigen, die mit diesem Buchstaben beginnen. Geben Sie einen weiteren Buchstaben wie etwa L ein, zeigt das Listenfeld nur noch Einträge an, die mit AL beginnen.

Wenn Sie nach allen Artikelnamen suchen wollen, die einen Buchstaben oder eine Zeichenfolge an irgendeiner Stelle enthalten, verwenden Sie entsprechende Platzhalter wie etwa das Sternchen. Der Suchbegriff *A* liefert dann alle Artikel, die den Buchstaben A im Namen enthalten (siehe Bild 1).

Schnellsuche im Listenfeld

Bild 1: Schnellsuche im Listenfeld

Alternativ können Sie die Suche auch so gestalten, dass automatisch alle Artikelnamen ausgegeben werden, die eine bestimmte Zeichenfolge enthalten – dazu später mehr.

Formular mit Schnellsuche erstellen

Legen Sie ein neues Formular an und speichern Sie es unter dem Namen frmSchnellsuche.

Fügen Sie dem Formular dann ein Listenfeld zur Anzeige des Suchergebnisses an. Das Listenfeld soll den Namen lstArtikel erhalten. Es soll nur zur Auswahl eines Artikels dienen, daher reicht es, wenn es die Artikelnamen anzeigt. Damit der ausgewählte Datensatz jedoch eindeutig identifiziert werden kann, muss die Datensatzherkunft des Listenfeldes neben dem Feld Artikelname auch noch das Feld ArtikelID enthalten. Außerdem kann eine Sortierung nach dem Feld Artikelname nicht schaden (siehe Bild 2).

Datensatzherkunft des Listenfeldes

Bild 2: Datensatzherkunft des Listenfeldes

Damit das Listenfeld nur den Artikelnamen, nicht aber das Feld ArtikelID anzeigt, stellen Sie außerdem die Eigenschaften Spaltenanzahl und Spaltenbreiten des Listenfeld-Steuerelements auf die Werte 2 und 0cm ein. Wie ein Wechsel in die Formularansicht zeigt, liefert das Listenfeld bereits die gewünschten Daten (siehe Bild 3). Bevor wir uns um das Textfeld zur Eingabe des Suchergebnisses kümmern, stellen wir noch einige Formulareigenschaften ein. Die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten stellen Sie auf den Wert Nein ein. Das Formular wirkt dadurch etwas aufgeräumter, außerdem benötigen wir all diese Elemente aktuell nicht.

Das Listenfeld wird wie gewünscht gefüllt.

Bild 3: Das Listenfeld wird wie gewünscht gefüllt.

Suchfeld anlegen

Als Suchfeld verwenden wir ein herkömmliches Textfeld. Es soll txtSuche heißen und soll über dem Listenfeld platziert werden. Die Eingabe von Suchbegriffen ist kein Problem, aber wie sorgen wir dafür, dass die im Listenfeld angezeigten Artikelnamen nach jeder änderung des Suchbegriffs aktualisiert werden

Dazu benötigen wir ein Ereignis und eine entsprechende Ereignisprozedur, die nach jeder änderung des Textfeldinhalts ausgelöst wird. Habe ich änderung gesagt Nun, da gibt es doch eine Ereigniseigenschaft mit dem Namen Bei änderung. Prüfen Sie also, ob dieses Ereignis das Passende ist und legen dieses an. Dazu markieren Sie das Textfeld, aktivieren das Eigenschaftsfenster und wählen für die Eigenschaft Bei änderung den Eintrag [Ereignisprozedur] aus (siehe Bild 4). Die nach einem Klick auf die Schaltfläche mit den drei Punkten (…) im VBA-Editor angezeigte Prozedur ergänzen Sie wie folgt:

Anlegen der Ereignisprozedur, die durch das Ereignis Bei änderung ausgelöst wird.

Bild 4: Anlegen der Ereignisprozedur, die durch das Ereignis Bei änderung ausgelöst wird.

Private Sub txtSuche_Change()
     Debug.Print "Suchbegriff: " & Me!txtSuche
End Sub

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:

Schreibe einen Kommentar