Einfache Suchfunktion für Formulare

Die Suche von Daten in den Tabellen einer Datenbank ist eine Aufgabe, die fast jede Datenbankanwendung erfüllen muss. Die grundlegenden Techniken bestehen darin, Suchbegriffe in ein Formular einzugeben und die daraus resultierende Ergebnismenge in einem geeigneten Steuerelement anzuzeigen – beispielsweise in einem Unterformular in der Datenblattansicht, in einem Listenfeld oder auch einfach in einem gefilterten Formular in der Formularansicht. Die wichtigste Grundlagen ist dabei, die Datenherkunft mit den entsprechenden Kriterien zu spicken. Wie es geht, zeigt dieser Beitrag.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1201_EinfacheSuchfunktion.mdb.

Artikelabfrage

Für die verschiedenen Beispiele dieses Artikels wird die Artikeltabelle der Beispieldatenbank herhalten. Sie liefert diverse Text- und Zahlenfelder, die sich für das Zusammenstellen der benötigten Abfragen eignen. Der Vollständigkeit halber haben wir die ursprüngliche Tabelle noch um Datumsfeld namens AngelegtAm erweitert.

Suchen per Abfrage

Die Grundlagen zum Durchsuchen einer Abfrage nach verschiedenen Kriterien finden Sie beispielsweise in den Artikeln SQL: SELECT-Abfragen, Teil II, Filtern nach Zahlen, Filtern von Textfeldern oder Datum und Zeit. Im vorliegenden Artikel erfahren Sie, wie Sie die in diesen Artikeln gewonnenen Kenntnisse dazu nutzen können, dem Benutzer eine Eingabemöglichkeit für Suchbegriffe zu bieten, eine entsprechende Abfrage zu formulieren und das Ergebnis darzustellen.

Einen der möglichen Bausteine haben Sie bereits im Artikel Einsatz von Parametern kennengelernt. Sie können einer Abfrage einen Parameter in Form eines in eckigen Klammern eingefassten Ausdrucks als Bedingung hinzufügen, der vor dem Anzeigen des Abfrageergebnisses abgefragt und ausgewertet wird.

In Grundzügen bauen wir auf dieser Technik auf, Sie werden jedoch auch anderen Techniken kennenlernen, um das gewünschte Ergebnis zu erhalten.

Aufbau der Formulare

In den Beispielen soll der Benutzer den Namen eines Artikels oder einen Teil des Namens in ein Textfeld eingeben. Nach einem Mausklick auf die Suchen-Schaltfläche soll ein Unterformular in der Datenblattansicht die gefundenen Datensätze als Suchergebnis anzeigen.

Wir erstellen zunächst das Formular an, das später als Unterformular eingesetzt wird. Legen Sie dazu ein neues Formular an und speichern Sie es unter dem Namen sfmArtikelsuche (sfm steht für Subform). Wählen Sie für die Eigenschaft Datenherkunft zunächst die Tabelle tblArtikel aus.

Nach der Auswahl stehen in der Feldliste alle Felder der gewählten Datenherkunft bereit. Ziehen Sie alle Felder in den Detailbereich der Entwurfsansicht des Formulars. Stellen Sie dann die Eigenschaft Standardansicht auf den Wert Datenblatt ein (siehe Bild 1).

Entwurfsansicht des Unterformulars sfmArtikelsuche

Bild 1: Entwurfsansicht des Unterformulars sfmArtikelsuche

Speichern Sie nun das Unterformular und schließen Sie es. Anschließend erstellen Sie ein weiteres neues Formular und speichern es unter dem Namen frmArtikelsuche. Es handelt sich dabei um das Hauptformular, das gleich das Unterformular aufnehmen wird. Zuvor legen Sie jedoch noch die benötigten Steuerelemente an. Das erste ist ein Textfeld namens txtSuche, das zweite eine Schaltfläche namens cmdSuche (siehe Bild 2).

Hauptformular der Artikelsuche

Bild 2: Hauptformular der Artikelsuche

Nun fügen Sie das Unterformular sfmArtikelsuche ein, indem Sie es mit der Maus aus dem Datenbankfenster beziehungsweise dem Navigationsbereich in den Detailbereich des Entwurfs des Formulars frmArtikelsuche ziehen.

Das Formular mit dem Unterformular sieht in der Entwurfsansicht nun wie in Bild 3 aus. Sie können nun noch das Bezeichnungsfeld des Unterformulars mit der Beschriftung Suchergebnis ausstatten und gegebenenfalls Formular und Unterformular noch etwas breiter gestalten, damit der Benutzer mehr Daten auf einen Blick sieht und weniger scrollen muss. Stellen Sie außerdem die Eigenschaften Bildlaufleisten, Navigationsschaltflächen und Datensatzmarkierer auf Nein ein – diese Elemente brauchen Sie für das Hauptformular nicht.

Haupt- und Unterformular in der Entwurfsansicht

Bild 3: Haupt- und Unterformular in der Entwurfsansicht

Nach einem Wechsel in die Formularansicht können Sie außerdem noch die Schriftgröße im Unterformular anpassen, indem Sie auf einen der Spaltenköpfe klicken und dann in der Symbolleiste oder im Ribbon den gewünschten Wert für die Schriftgröße eingeben. Das Formular ist nun fast fertig und sieht wie in Bild 4 aus.

Ohne weitere Handgriffe zeigt das Unterformular einfach alle Datensätze an.

Bild 4: Ohne weitere Handgriffe zeigt das Unterformular einfach alle Datensätze an.

Suchen per Filter

Die einfachste Möglichkeit, die Datensätze des Unterformulars durch die Eingabe eines Suchbegriffs einzuschränken, ist der Einsatz der Eigenschaft Filter des Unterformulars.

Dies funktioniert folgendermaßen: Der Benutzer gibt einen Suchbegriff in das Textfeld txtSuche ein und betätigt dann die Schaltfläche mit der Beschriftung Suchen. Dies löst eine Ereignisprozedur an, die Sie wie folgt anlegen:

  • öffnen Sie das Formular frmArtikelsuche in der Entwurfsansicht.
  • Klicken Sie auf die Schaltfläche und aktivieren Sie mit der Taste F4 das Eigenschaftsfenster, sofern noch nicht sichtbar.
  • Wählen Sie für die Eigenschaft Beim Klicken auf der Registerseite Ereignis den Eintrag [Ereignisprozedur] für die Eigenschaft Beim Klicken aus und klicken Sie anschließend auf die Schaltfläche rechts mit den drei Punkten (…).
  • Im VBA-Editor erscheint nun die leere Prozedur, die Sie wie folgt füllen (siehe auch Bild 5):
  • Diese Prozedur führt den Suchvorgang durch.

    Bild 5: Diese Prozedur führt den Suchvorgang durch.

Private Sub cmdSuche_Click()
     Dim strFilter As String
     If Len(Me!txtSuche) > 0 Then
         strFilter = "Artikelname LIKE '" _
             & Me!txtSuche & "'"
         Me!sfmArtikelsuche.Form.Filter = strFilter
         Me!sfmArtikelsuche.Form.FilterOn = True
     Else
         Me!sfmArtikelsuche.Form.Filter = ""
     End If
End Sub

Wenn Sie nun in die Formularansicht wechseln, können Sie die Prozedur gleich ausprobieren. Geben Sie einen Suchbegriff in das Suchfeld ein, zum Beispiel C*. Klicken Sie dann auf die Schaltfläche Suchen, löst dies die soeben angelegte Prozedur aus.

Die If-Bedingung prüft zunächst, ob die Länge der Zeichenkette im Textfeld txtSuche länger als 0 Zeichen ist, also ob dort überhaupt ein Suchbegriff eingetragen wurde. Falls ja, wird ein Filterkriterium für die Eigenschaft Filter zusammengesetzt, das aus der Angabe des zu durchsuchenden Feldes, dem Vergleichsoperator LIKE und einem Vergleichsausdruck besteht, der sich aus zwei Hochkommata und dem Inhalt des Textfeldes zusammensetzt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar