Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Fügen Sie einem Detailformular eine einfache Suchfunktion hinzu, die ihr Ergebnis in einem Listenfeld darstellt.

Techniken

Formulare, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

SuchenMitListe.mdb

Shortlink

www.access-im-unternehmen.de/815

Suche mit Liste

André Minhorst, Duisburg

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.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.