Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2007.

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'!

Diesen Beitrag twittern

Zusammenfassung

Erweitern Sie Kombinationsfelder um eine Suchfunktion für eines oder mehrere Zielfelder.

Techniken

Formulare, Kombinationsfelder, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

Suchkombinationsfelder.mdb,
Suchkombinationsfelder.accdb

Shortlink

474

Kombinationsfelder mit Suchfunktion

André Minhorst, Duisburg

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

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.