Datensätze suchen per Formular

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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.
  • Die Realisierung derartiger Suchmöglichkeiten zeigt Ihnen das folgende Beispiel.

    Die Bezeichnung Query by Form kann mit „formularbasierter“ oder „formulargestützter“ Suche übersetzt werden. Der Sinn einer solchen Suchmethode ist, den Anwender bei der Bildung komplexer Suchkriterien durch eine einfache Benutzeroberfläche zu unterstützen.

    Die Auswahl der Suchfelder und Suchkriterien soll für jedermann intuitiv und ohne größere Vorkenntnisse möglich sein.

    Eine weitere Anforderung an ein solches Suchformular ist, dass es flexibel verwendbar sein sollte. In der Praxis ergeben sich daraus zwei Forderungen:

  • Das QbF sollte innerhalb einer Anwendung ohne großen änderungsaufwand für unterschiedliche Formulare verwendbar sein.
  • Die gleiche Forderung gilt natürlich auch für die Verwendung des QbF in unterschiedlichen Datenbanken.
  • Grundsätzliche Funktionsweise von Query by Form

    Zum besseren Verständnis zunächst die grundsätzliche Funktionsweise dieser QbF-Lösung:

    Bild 4: Das Formular FrmQbF

    Das Formular ist ein ungebundenes Formular (siehe Bild 4). Seinem Einsatzzweck entsprechend ist die Eigenschaft Rahmenart auf den Wert Dialog eingestellt.

    Im linken Kombinationsfeld Feldname werden die Suchfelder angezeigt, die im Entwurf der Abfrage qryFeldliste nach Bedarf zusammengestellt werden können.

    Hinweis

    Durch die Auswahl der Felder in der Abfrage haben Sie die Möglichkeit, die Suche auf bestimmte Felder zu beschränken.

    Im Kombinationsfeld Vergleichslogik wählen Sie die gewünschte Vergleichslogik für Ihre Suche aus.

    Die von Access her bekannten Vergleichsoperatoren sind bei dieser Lösung in unsere normale Sprache „übersetzt“ worden, um den Anwendern die Bedienung zu erleichtern. Anstelle des Zeichens < kann der Anwender beispielsweise die Worte ist kleiner als auswählen.

    Im dritten Kombinationsfeld Suchbegriff kann eingeben werden, wonach gesucht werden soll. Bei Bedarf wird ein weiteres Feld Suchbegriff angezeigt, damit auch Sucheingaben wie beispielsweise Zwischen 20 000 und 70 000 möglich sind.

    Insgesamt kann das ausgewählte Suchfeld mit vier weiteren Feldern über Und bzw. Oder verknüpft werden. Dies erfolgt durch Anklicken der entsprechenden Option auf der linken Seite des Formulars.

    Anschließend wird aus all diesen Eingaben ein SQL-String zusammengesetzt, der als Filter auf das aufrufende Formular gesetzt wird.

    Diese gesamte Funktionalität befindet sich im Modul From_FrmQbF der Beispieldatenbanken.

    Wichtige Einzelheiten dieser Funktionalität werden in den folgenden Abschnitten näher beschrieben.

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

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar