Kombinationsfelder sind schon eine praktische Einrichtung: Sie erlauben nicht nur die Auswahl von Einträgen, die schon nach dem Alphabet voreingestellt sind, sondern auch noch die Eingabe der Anfangsbuchstaben der gesuchten Inhalte. Was aber, wenn Sie doch gezielter nach einem Eintrag im Kombinationsfeld suchen wollen – beispielsweise nach Einträgen, die bestimmte Vergleichstexte an beliebiger Stelle enthalten Dieser Artikel zeigt, wie Sie für ein Kombinationsfeld nach Wunsch per Doppelklick oder über eine zusätzliche Schaltfläche einen Dialog öffnen, mit dem Sie schnell den gesuchten Eintrag auswählen können.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1805_Kombisuche.accdb.
Vorbereitung
Wir wollen uns die eingebauten Suchfeatures und usnere neuen Funktionen an einem ungebundenen Kombinationsfeld ansehen, das wir in einem neuen Formular namens frmKombisuche anlegen.
Das Kombinationsfeld soll cboArtikel heißen und als Datensatzherkunft die folgende SQL-Abfrage verwenden:
SELECT ArtikelID, Artikelname FROM tblArtikel ORDER BY Artikelname;
Es soll also die Einträge der Tabelle tblArtikel liefern, wobei wir nur die beiden Felder ArtikelID und Artikelname berücksichtigen. Diese sollen alphabetisch nach den Werten des Feldes Artikelname sortiert werden. Rechts neben dem Kombinationsfeld fügen wir noch eine Schaltfläche namens cmdSuche ein, der wir als Beschriftung schlicht drei Punkte hinzufügen.
Damit das Kombinationsfeld nur die Werte des Feldes Artikelname anzeigt, nicht jedoch die der gebundenen ersten Spalte ArtikelID, stellen wir die Eigenschaft Spaltenanzahl auf 2 und die Eigenschaft Spaltenbreiten auf 0cm ein. Auf diese Weise wird die erste Spalte ausgeblendet (siehe Bild 1).
Bild 1: Entwurf des Formulars mit dem Kombinationsfeld
Eingebaute Suchfeatures
Wenn wir nun in die Formularansicht des Formulars wechseln und das Kombinationsfeld aufklappen, zeigt dieses zunächst alle Einträge der Datensatzherkunft an. Geben Sie nun einen oder mehrere Buchstaben ein, springt das Kombinationsfeld automatisch zum ersten Eintrag, der mit den gleichen Buchstaben beginnt, und markiert diesen wie in Bild 2.
Bild 2: Markieren des Eintrags mit den eingegebenen Anfangsbuchstaben
Das geschieht solange, bis sie einen Text eingegeben haben, der in den Werten des angezeigten Feldes nicht mehr gefunden wird – dann finden Sie nur noch den eingegebenen Text im Kombinationsfeld vor und die aufgeklappte Liste zeigt wieder alle Einträge der Datensatzherkunft an.
Diese Funktion ist also im Prinzip kein Filter, sondern nur ein Anspringen des ersten Eintrags, der den eingegebenen Zeichen entspricht. Damit wir noch gezielter suchen können, wollen wir nun noch ein zusätzliches Formular hinzufügen, dass per Doppelklick oder per Mausklick auf eine zusätzliche Schaltfläche neben dem Kombinationsfeld aufgerufen werden kann.
Suchformular anlegen
Das Suchformular wollen wir frmArtikelsucheKombi nennen. Es soll ein Textfeld enthalten, mir dem der Benutzer den Suchbegriff eingibt sowie ein Listenfeld, das die gefundenen Einträge der Datenherkunft liefert.
Da das Formular selbst nicht an eine Datenherkunft gebunden sein soll, können wir die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten auf den Wert Nein einstellen. Außerdem soll die Eigenschaft Automatisch zentrieren den Wert Ja erhalten.
Oben im Formular fügen wir das Textfeld namens txtSuche ein. Darunter legen wir ein Listenfeld namens lstSuchergebnis an. Dieses binden wir über die Eigenschaft Datensatzherkunft zunächst an die gleiche Abfrage, die wir bereits weiter oben für das Kombinationsfeld selbst genutzt haben:
SELECT ArtikelID, Artikelname FROM tblArtikel ORDER BY Artikelname;
Damit das Listenfeld, genau wie das Kombinationsfeld, nur die Artikelnamen anzeigt, aber nicht die Werte des Feldes ArtikelID, stellen wir auch hier die Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0cm ein.
Außerdem fügen wir noch eine Schaltfläche namens cmdOK und eine weitere Schaltfläche namens cmdAbbrechen zum Formularentwurf hinzu, der dann wie in Bild 3 aussieht.
Bild 3: Entwurf des Suchformulars
öffnen des Suchformulars
Bevor wir uns nun um die Funktionalität des Suchformulars kümmern, wollen wir erst einmal den Aufruf dieses Formulars realisieren. Dieser soll über zwei Möglichkeiten realisiert werden:
- einen Doppelklick auf das Kombinationsfeld und
- einen Klick auf die Schaltfläche cmdSuche rechts neben dem Kombinationsfeld.
Also hinterlegen wir eine Ereignisprozedur für die Ereigniseigenschaft Beim Doppelklicken des Kombinationsfeldes und eine für die Eigenschaft Beim Klicken der Schaltfläche cmdSuche. Für beide tragen wir den Aufruf einer weiteren Prozedur namens Kombisuche ein:
Private Sub cboArtikel_DblClick(Cancel As Integer) Call Kombisuche End Sub Private Sub cmdSuche_Click() Call Kombisuche End Sub
Der Hintergrund ist, dass beide die gleiche Aktion auslösen sollen – nämlich die Anzeige des Suchformulars und die Verarbeitung des dort gewählten Suchergebnisses. Also legen wir die dazu notwendigen Anweisung nur in einer einzigen Prozedur an, die dann von beiden Ereignisprozeduren aufgerufen wird. Auf diese Weise sparen wir uns redundanten Code.
Die durch diese beiden Ereignisprozeduren ausgelöste Prozedur sieht zunächst wie folgt aus:
Private Sub Kombisuche() End Sub
Diese werden wir aber schon bald mit den notwendigen Anweisungen füllen. Vorher überlegen wir uns, was genau geschehen soll, wenn wir entweder einen Doppelklick auf dem Kombinationsfeld ausführen oder die Schaltfläche cmdKombisuche anklicken. Fest steht: Wir wollen das Formular frmArtikelsucheKombi öffnen, damit es uns die gezielte Suche nach einem der Einträge des Kombinationsfeldes erlaubt.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: