Suche mit Liste

Wenn Sie Kundendaten in einem Formular anzeigen, nimmt dies eine Menge Platz ein. Für eine Übersichtsliste wird es in den meisten Fällen zu eng – daher kommt oft ein weiteres Formular als Werkzeug für die Auswahl des zu bearbeitenden Datensatzes hinzu. Mit ein paar Tricks packen Sie dennoch eine adäquate Funktion zum schnellen Auffinden bestimmter Kundendaten hinzu: zum Beispiel mit einem Textfeld zur Eingabe von Suchbegriffen, das seine Treffer in einem ansonsten verborgenen Listenfeld anzeigt und zur Auswahl anbietet.

Einen schönen Einsatzzweck für die Lösung aus diesem Beitrag finden Sie in einem weiteren Beitrag namens Formular für Liefer- und Rechnungsadressen (www.access-im-unternehmen.de/816). Das Formular zeigt jeweils genau einen Datensatz der Tabelle tblAdressen an. Eine gute Gelegenheit, eine platzsparende Möglichkeit zum Auswählen eines bestimmten Datensatzes einzubauen!

Was soll die Funktion bieten Grundsätzlich soll nur ein Textfeld zur Eingabe des Suchbegriffs sichtbar sein. Dieses soll bei Betätigung einer speziellen Tastenkombination, beispielsweise Strg + F, aktiviert werden und dem Benutzer die Möglichkeit zur Eingabe eines Suchbegriffs bieten. Dieser Suchbegriff soll nach noch festzulegenden Regeln den Datenbestand durchforsten und die Ergebnisse in einem Listenfeld anzeigen (s. Abb. 1). Dieses Listenfeld soll jedoch nur sichtbar sein, wenn die Eingabe überhaupt Ergebnisse liefert! Enthält das Listenfeld einen passenden Eintrag, soll der Benutzer ganz einfach mit der Nach unten-Taste vom Textfeld zur Eingabe des Suchbegriffs zum Listenfeld gelangen, um einen der gefundenen Einträge auszuwählen. Hat er einen passenden Eintrag gefunden und ausgewählt, soll das Betätigen der Eingabetaste dazu führen, dass das Suchfeld geleert, das Listenfeld geschlossen und der betroffene Datensatz im Formular angezeigt wird.

pic005.png

Abb. 1: Schnellsuche nach Kundendaten

Einfache Suche

Um die grundlegenden Techniken kennenzulernen und auszuprobieren, legen Sie zunächst ein Textfeld über den übrigen Steuerelementen an. Geben Sie dem Textfeld den Namen txtSuche. Fügen Sie außerdem ein Listenfeld hinzu, das genauso breit ist wie das Textfeld. Nennen Sie es lstSuchergebnis und stellen Sie seine Eigenschaft Sichtbar auf den Wert Nein ein, damit es beim Anzeigen des Formulars gar nicht erst erscheint.

Die Höhe können Sie indes gleich auf den gewünschten Wert einstellen – da das Listenfeld normalerweise unsichtbar ist, spielt der im Entwurf überdeckte Bereich keine Rolle (s. Abb. 2).

pic001.png

Abb. 2: Erster Entwurf des Suchfeldes und des Listenfeldes zur Anzeige der Suchergebnisse

Suche aktivieren per Strg + F

Die Suche soll mit der Tastenkombination Strg + F aktiviert werden. Dies erledigen Sie am besten mit dem Ereignis Bei Taste ab des Formulars. Damit dieses Ereignis funktioniert, stellen Sie außerdem die Eigenschaft Tastenvorschau auf Ja ein (s. Abb. 3).

pic002.png

Abb. 3: Aktivieren der Tastenkombination

Die Prozedur, die durch das Ereignis Bei Taste ab ausgelöst werden soll, sieht schließlich wie folgt aus:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyF
            If Shift = acCtrlMask Then
                Me!txtSuche.SetFocus
                KeyCode = 0
            End If
    End Select
End Sub

Die Prozedur prüft die beiden Parameter KeyCode und Shift. Hat KeyCode den Wert vbKeyF (für F) und Shift den Wert acCtrlMask (für die Strg-Taste), wollen die beiden Anweisungen in der If…Then-Bedingung ausgeführt werden.

Die erste verschiebt den Fokus auf das Steuerelement txtSuche, die zweite biegt den Wert des Parameters KeyCode auf 0 um, was dem Drücken keiner Taste entspricht.

Dies bewirkt, dass die gedrückte Taste nicht weiter ausgewertet wird. Würden Sie diese Einstellung nicht vornehmen, würde Strg + F von Access selbst ausgewertet, was die Anzeige des Access-eigenen Suchen-Dialogs nach sich ziehen würde.

Damit wäre die erste Teilaufgabe gelöst – der Benutzer gelangt mit der Tastenkombination Strg + F in das Suchfeld.

Suche nach Firmenname

Danach implementieren wir eine sehr einfache Suche, die nur den Firmennamen berücksichtigt. Die Suche soll nach Eingabe jedes einzelnen Zeichens ausgelöst werden, was den Einsatz der Ereigniseigenschaft Bei änderung voraussetzt.

Dieses Ereignis wird mit jeder änderung des angezeigten Textes des Suchfeldes ausgelöst. Fügen Sie den Wert [Ereignisprozedur] hinzu und klicken Sie auf die Schaltfläche mit den drei Punkten, um die nun im VBA-Editor erscheinende Ereignisprozedur wie in Listing 1 zu ergänzen.

Listing 1: Zusammenstellen und zuweisen eines Suchausdrucks, dessen Ergebnis im Listenfeld lstSuchergebnis angezeigt werden soll

Private Sub txtSuche_Change()
    Dim strSQL As String
    If Len(Me!txtSuche.Text) > 0 Then
        strSQL = "SELECT Firma_Lieferung FROM tblAdressen WHERE Firma_Lieferung LIKE ''" _
              & Me!txtSuche.Text & "*''"
        Me!lstSuchergebnis.RowSource = strSQL
        If Me!lstSuchergebnis.ListCount > 0 Then
            Me!lstSuchergebnis.Visible = True
        Else
            Me!lstSuchergebnis.Visible = False
        End If
    Else
        Me!lstSuchergebnis.RowSource = ""
        Me!lstSuchergebnis.Visible = False
    End If
End Sub

Die Prozedur stellt in der Variablen strSQL eine einfache SQL-Abfrage zusammen, die zunächst nur alle Firmennamen der Lieferanschrift zurückliefern soll, deren Name mit dem im Suchfeld eingetragenen Ausdruck beginnt.

Dies soll jedoch nur geschehen, wenn das Textfeld txtSuche überhaupt einen Ausdruck enthält, die Länge des Wertes der Eigenschaft Text des Textfeldes also größer 0 ist.

In diesem Fall setzt die Prozedur den SQL-Ausdruck zusammen, weist diesen der Eigenschaft RowSource des Listenfeldes zu und macht dieses schließlich sichtbar – allerdings nur, wenn dieses überhaupt mindestens einen Datensatz anzeigt.

Sollte das Textfeld txtSuche keinen Text enthalten, wird das Listenfeld schlicht unsichtbar gemacht.

Damit wäre bereits ein Dummy für den zweiten Schritt der Lösung erstellt: Das Listenfeld zeigt ein Suchergebnis an – wenn auch zugegebenermaßen nur ein einziges Feld bei Suche und Anzeige berücksichtigt wird (s. Abb. 4).

pic003.png

Abb. 4: Anzeigen der Suchergebnisse

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar