|  | 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'! |
| |
Datensätze suchen per Formular
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.

Abb. 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.
Datensätze per Kombinationsfeld suchen
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 (s. Abb. 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.

Abb. 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.
Datensätze per Listenfeld suchen
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 der Suche
Klicken Sie im Listenfeld Namen suchen einfach auf den gesuchten Namen oder tippen Sie stattdessen den Anfangsbuchstaben ein (s. Abb. 2). In beiden Fällen wird der passende Datensatz auch im Formular angezeigt.

Abb. 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 (s. Abb. 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.
Das Formular FrmQbF
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:

Abb. 4: Das Formular FrmQbF
Das Formular ist ein ungebundenes Formular (s. Abb. 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.
|