Suchen und schnell finden

Autor: Klaus Giesen, Wuppertal

Wer suchet, der findet – heißt es so schön. Bezogen auf Access bedeutet dies, dass Sie als Anwender in der Lage sein sollten, rasch und komfortabel die gewünschten Datensätze in einem Formular zu finden. Falls Sie dabei allein auf die eingebauten Suchmöglichkeiten von Access angewiesen sind, schaut es mit Komfort und erweiterten Suchoptionen – wie beispielsweise die Verknüpfungen mehrerer Felder mit Und bzw. Oder – ziemlich trübe aus. Auch wenn Sie lediglich zu einem ganz bestimmten Datensatz – beispielsweise einem bestimmten Nachnamen – springen wollen, ist das ohne eine selbst gebaute Funktionalität nicht ohne Weiteres möglich.

In diesem Beitrag werden drei verschiedene Methoden zum Suchen von Datensätzen vorgestellt. Die ersten beiden (per Kombinations- bzw. per Listenfeld) sind zwar einerseits relativ simpel gehalten, andererseits aber gerade deshalb vorzüglich dazu geeignet, schnell den gewünschten Datensatz – beispielsweise über den Nachnamen – auszuwählen.

Bild 1: Das Formular frmKontakte 1 zur Suche per Kombinationsfeld

Die dritte Methode ist eine Suche per QbF (engl. Query by Form). Damit ist eine felderübergreifende Suche nach beliebigen Kriterien inklusive Und- bzw. Oder-Verknüpfung möglich. Die Beispieldatenbank demonstriert die Suche mittels einer einfachen Kontaktverwaltung. Sie liegt in Versionen für Access 97 (RecordsFind97.mdb) und Access 2000 (RecordsFind2000.mdb) auf der beiliegenden CD vor.

Das folgende Beispiel finden Sie im Formular FrmKontakte 1 der Beispieldatenbank.

Bedienung der Suche

Zur Suche nach einem Datensatz klappen Sie lediglich das Kombinationsfeld auf und markieren den gewünschten Namen (siehe Bild 1).

Alternativ dazu können Sie auch den ersten Buchstaben des gesuchten Namens eintippen. Dafür ist die Kombinationsfeldeigenschaft Automatisch ergänzen verantwortlich, die in diesem Fall auf Ja eingestellt ist.

Bild 2: Das Formular frmKontakte 2 zur Suche per Listenfeld

Private Sub CboSuchen_AfterUpdate()
    DoCmd.GoToControl "Nachname"
    DoCmd.FindRecord CboSuchen, acEntire, False, _        acSearchAll, False, , True
End Sub

Quellcode 1

Private Sub BtnWeitersuchen_Click()
    DoCmd.GoToControl "Nachname"
    If Not IsNull(CboSuchen) Then
        DoCmd.FindNext
    End If
End Sub

Quellcode 2

Falls mehrere identische Nachnamen vorhanden sind, klicken Sie auf die Schaltfläche Weitersuchen, um zum gewünschten Namen zu gelangen.

Funktionalität der Suche

Die Funktionalität der Kombinationsfeldsuche liegt zunächst einmal in der zugrunde liegenden Abfrage qryCboSuchen begründet. Diese ist als Datensatzherkunft des Kombinationsfeldes eingetragen.

In der Abfrage ist die Funktion Gruppierung aktiviert. Diese bewirkt, dass im Kombinationsfeld auch mehrfach vorhandene Namen nur einmal angezeigt werden.

Durch das Ereignis Nach Aktualisierung des Kombinationsfeldes wird die Ereignisprozedur Cbo_Suchen AfterUpdate() ausgeführt (s. Quellcode 1).

Zuerst wird auf das Feld Nachname positioniert. Danach wird mit der Find-Methode der im Kombinationsfeld ausgewählte Nachname gesucht.

ähnlich einfach ist die Ereignisprozedur BtnWeitersuchen_Click() aufgebaut (s. Quellcode 2). Diese wird beim Klick auf die Schaltfläche Weitersuchen ausgeführt.

Falls der Wert des Kombinationsfelds nicht Null ist, wird mit der FindNext-Methode der nächste Datensatz gesucht, der die Kriterien der eben ausgeführten Find-Methode erfüllt.

Die Suche nach Datensätzen per Listenfeld läuft ähnlich wie die Suche mittels Kombinationsfeld ab.

Das passende Beispiel finden Sie in der Beispieldatenbank unter dem Namen FrmKontakte 2.

Bedienung derSuche

Klicken Sie im Listenfeld Namen suchen einfach auf den gesuchten Namen oder tippen Sie stattdessen den Anfangsbuchstaben ein (siehe Bild 2). In beiden Fällen wird der passende Datensatz auch im Formular angezeigt.

Bild 3: Das Eigenschaftsfenster des Listenfelds LstSuchen

Funktionalität der Suche

Das Listenfeld funktioniert wie folgt: Beim Klicken in das Listenfeld wird die Ereignisprozedur LstSuchen_Click() ausgeführt.

Diese springt im Formular FrmKontakte 2 zum Feld KontakteID. Auch hier wird die Methode Find benutzt, die sich zur Suche die KontakteID aus der erste Spalte des Listenfeldes holt.

Durch die Auslösung des Ereignisses Nach Aktualisierung des Listenfelds wird die Ereignisprozedur LstSuchen_Click() aufgerufen und anschließend der Fokus auf das Listenfeld gesetzt.

Wichtig ist hierbei, dass im Eigenschaftsfenster des Listenfelds der Eintrag [Ereignisprozedur] für das Beim Klicken-Ereignis nicht vorhanden sein darf (siehe Bild 3).

Anderenfalls würde immer das Feld KontakteID des Formulars den Fokus besitzen und es wäre nicht möglich, den gesuchten Namen durch Eingabe eines Buchstabens im Listenfeld auszuwählen.

Damit haben Sie nun zwei einfache und schnelle Methoden kennen gelernt, nach Datensätzen zu suchen.

Natürlich dürfen auch die Nachteile dieser Lösung nicht verschwiegen werden:

  • Das Suchfeld ist fest vorgegeben.
  • Die Verwendung von Vergleichsoperatoren wie beispielsweise Größer als oder Zwischen ist nicht möglich.
  • Es ist nicht möglich, mehrere Suchfelder miteinander zu kombinieren.
  • Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

    TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

    Schreibe einen Kommentar