Kombinationsfelder mit Suchfunktion

Kombinationsfelder zeigen normalerweise nur den Inhalt eines Feldes an. An der mangelnden Flexibilität dieses Steuerelements liegt das nicht: Natürlich können Sie auch den Inhalt mehrerer Felder gleichzeitig anzeigen und mit ein wenig Fantasie oder der Lektüre dieses Beitrags erweitern Sie das Kombinationsfeld gleichzeitig zum Suchfeld.

Sinnvolle Beispiele für die Anzeige gleich mehrerer Felder in einem Kombinationsfeld gibt es viele: Das Formular frmBuchungen der Lösung Kassenbuch aus dem gleichnamigen Artikel (s. Shortlink 486) liefert beispielsweise gleich mehrere Einsatzmöglichkeiten. So können Sie dort mit einem Kombinationsfeld schnell nach einem bestimmten Buchungsdatensatz suchen, aber auch Buchungskonten mit einem flexiblen Kombinationfeld auswählen.

Ersteres beschreibt dieser Beitrag im Detail: Sie erfahren, wie Sie das Kombinationsfeld dazu bringen, den Inhalt mehr als eines Feldes gleichzeitig anzuzeigen, und wie Sie darüber hinaus auch noch in den Inhalten der beiden Felder suchen können. Das Formular soll dann den ausgewählten Buchungsdatensatz anzeigen.

Erstmal soll das Kombinationsfeld namens cboGeheZuBeleg aber die gewünschten Daten beim „normalen“ Aufklappen liefern – etwa so wie in Abb. 1, wo es die Buchungsnummer und den Buchungstext gleichzeitig anzeigt.

abb001.tif

Abb. 1: Anzeige des Inhalts zweier Felder beim Aufklappen der Kombinationsfeldeinträge

Das ist an sich noch keine große Kunst. Sie stellen einfach die Eigenschaften Spaltenanzahl und Spaltenbreiten auf 2 beziehungsweise 0cm sowie die Datensatzherkunft des Kombinationsfeldes auf den folgenden Wert ein:

SELECT tblBuchungen.BuchungID, [Belegnummer] 
& ' ' & [Buchungstext] AS Buchung
FROM tblBuchungen

Diese SQL-Anweisung setzt die beiden Felder der Tabelle tblBuchungen, die übrigens wie in Abb. 2 aussieht, zu einer per Leerzeichen getrennten Zeichenkette zusammen.

abb002.tif

Abb. 2: Diese Tabelle liefert die Daten für das Kombinationsfeld zum Auswählen des aktuellen Buchungsdatensatzes.

Die Ereignisprozedur aus Listing 1 nimmt den einfacheren Teil der Programmierung des Kombinationsfeldes vorneweg. Die erste Anweisung sorgt für die Anzeige des Datensatzes mit der in der gebundenen Spalte des Kombinationsfeldes enthaltenen Buchungs-ID.

Listing 1: Nach dem Aktualisieren des Kombinationsfeldes soll das Formular den passenden Datensatz anzeigen.

Private Sub cboGeheZuBeleg_AfterUpdate()
     Me.Recordset.FindFirst "BuchungID = " & Me.cboGeheZuBeleg
     Me.cboGeheZuBeleg.RowSource = "SELECT BuchungID, Belegnummer & '' '' & Buchungstext " _
"FROM tblBuchungen"
     Me.cboGeheZuBeleg = Null
     bolUpdatedGeheZuBeleg = True
End Sub

Die zweite stellt die RowSource-Eigenschaft, die der Datensatzherkunft-Eigenschaft im Eigenschaftsfenster entspricht, wieder auf den ursprünglichen Wert ein. Warum dies geschieht, erfahren Sie weiter unten. Außerdem leert die Routine noch das Kombinationsfeld und setzt eine Variable, deren Funktion Sie ebenfalls später kennen lernen, auf den Wert True.

Nicht automatisch ergänzen

Die Eigenschaft Automatisch ergänzen des Kombinationsfeldes sorgt dafür, dass dieses direkt den nächsten in der Liste enthaltenen Datensatz anzeigt, der mit der aktuell eingegebenen Zeichenfolge übereinstimmt. Was an sich eine Hilfe ist, wirkt sich hier eher hinderlich aus, wie Sie gleich erfahren werden.

Das Kombinationsfeld soll bei der Suche nach Zeichenketten innerhalb der angezeigten Einträge helfen, indem es die angezeigten Einträge dem aktuellen Inhalt des Kombinationsfeldes entsprechend einschränkt.

Sinnvollerweise soll es nach der Eingabe des ersten Zeichens auch noch aufklappen, sodass der Benutzer sieht, welche Einträge in Frage kommen.

Das passende Ereignis heißt Bei änderung – es reagiert auf die Eingabe jedes einzelnen Zeichens. Die Routine aus Listing 2 setzt die obigen Ideen um, indem sie zunächst die Eigenschaft RowSource auf einen SQL-Ausdruck einstellt, der die Datensatzherkunft auf alle Datensätze der Tabelle tblBuchungen reduziert, deren Feld Belegnummer mit dem eingegebenen Text beginnt oder dessen Buchungstext den eingegebenen Text enthält. Anschließend klappt sie das Kombinationsfeld mit der DropDown-Methode auf.

Listing 2: Diese Routine sorgt beim ändern des Kombinationsfeld-Textes für die Aktualisierung der Elemente der Datensatzherkunft.

Private Sub cboGeheZuBuchung_Change()
     Dim strSQL As String
     strSQL = "SELECT BuchungID, Belegnummer & '' '' & Buchungstext FROM tblBuchungen " _
"WHERE Belegnummer LIKE ''" & Me!cboGeheZuBuchung.Text & "*' OR Buchungstext LIKE ''*" _
& Me!cboGeheZuBuchung.Text & "*'"
     Me!cboGeheZuBuchung.RowSource = strSQL
     Me!cboGeheZuBuchung.Dropdown
End Sub

Interessanterweise funktioniert dies aber nicht wie gewünscht: Die Eingabe der Zahl 1 beispielsweise zeigt nur einen Datensatz an, obwohl es in den Beispieldaten mehr als einen Datensatz gibt, dessen Belegnummer mit dieser Zahl beginnt.

Der Grund ist ganz einfach: Die Eigenschaft Automatisch ergänzen sorgt dafür, dass das Kombinationsfeld direkt den ersten zur Zahl passenden Eintrag anzeigt (s. Abb. 3). Die SQL-Anweisung kann dazu natürlich nur einen Datensatz finden – nämlich den, der mit dem durch die automatische Ergänzung im Kombinationsfeld angezeigten Text übereinstimmt.

abb003.tif

Abb. 3: Die Eigenschaft Automatisch ergänzen sorgt dafür, dass Access direkt bei der Eingabe den nächsten passenden Wert anzeigt..

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar