Kombinationsfelder dynamisch füllen

Die meisten Kombinationsfelder beziehen Ihre Daten aus einer Tabelle oder Abfrage. Manchmal liegen die anzuzeigenden Daten aber nicht in Tabellenform vor – weil es sich nicht lohnt, dafür eine Tabelle anzulegen, oder weil diese aus anderen Quellen stammen, wie etwa Benutzer oder Benutzergruppen. Am Beispiel von Datumsangaben zeigt dieser Beitrag, wie Sie Kombinationsfelder zur Laufzeit mit Daten füllen, die nicht aus einer oder mehreren Tabellen stammen.

Die Eigenschaft Herkunftsart eines Kombinationsfeldes entscheidet darüber, woher dieses seine Daten beziehen soll. üblicherweise heißt der Wert dieser Eigenschaft Tabelle/Abfrage und die Eigenschaft Datensatzherkunft liefert die passende Datenquelle. Der zweite Wert namens Wertliste ermöglicht die Angabe einer durch Semikola getrennten Liste von Elementen für die Eigenschaft Datensatzherkunft, die je nach Spaltenanzahl unterschiedlich ausgegeben werden. Die dritte Variante namens Feldliste ist eher für Spezialanwendungen gedacht und liefert die Felder der in Datensatzherkunft angegebenen Tabelle als Elemente des Kombinationsfeldes.

Bei den beiden zuerst genannten Einstellungen Tabelle/Abfrage und Wertliste können Sie den Wert für Datensatzherkunft natürlich nachträglich per VBA anpassen und damit eine gewisse Dynamik erreichen. Das Gleiche gilt für die vierte Möglichkeit, die nicht auf den ersten Blick ersichtlich ist: Dabei weisen Sie der Eigenschaft Herkunftsart den Namen einer VBA-Funktion mit spezieller Syntax zu, mit der Sie die einzufügenden Daten definieren.

Und es gibt auch noch eine fünfte Variante, in deren Genuss allerdings nur Benutzer von Access XP und höher kommen: Dabei können Sie der Eigenschaft Recordset eines Steuerelements direkt ein DAO- oder ADO-Recordset zuweisen.

Bis auf die erste und dritte können Sie alle Varianten einsetzen, um Daten, die nicht aus Tabellen stammen, in Kombinationsfeldern zur Auswahl bereitzustellen. Natürlich können Sie auch eine Tabelle temporär füllen und als Datensatzherkunft des Kombinationsfeldes angeben, aber dieser Ansatz soll hier nicht weiter besprochen werden.

Beispielanwendung

Als Beispiel für die verschiedenen Varianten zum dynamischen Füllen eines Kombinationsfeldes dient die Auswahl eines Jahres. Das Beispielformular enthält drei Textfelder, in die Sie das erste, das letzte und das aktuell anzuzeigende Jahr eingeben können. Mit einem Klick auf eine Schaltfläche füllen Sie dann die Kombinationsfelder mit den drei verschiedenen Varianten.

Kombinationsfeld füllen per Wertliste

Für kleinere Datenmengen bietet sich eine Wertliste an. Die Wertliste enthält die einzelnen Einträge mit Semikola als Trennzeichen. Für die Anzeige von Jahren sieht dies ausschnittsweise so aus:

2000;2001;2002;2003;2004...

Natürlich geben Sie diese Liste nicht von Hand ein, sondern lassen den Rechner für sich arbeiten. Wie das funktioniert, zeigt Listing 1. Die Laufvariable i (die Sie auch intAktuellesJahr nennen könnten) enthält jeweils das aktuelle der in einer Schleife durchgelaufenen Jahre. Innerhalb der Schleife fügt eine Anweisung das jeweils aktuelle Jahr plus ein Semikolon an die in der Variablen strJahre gespeicherte Zeichenkette an.

Listing 1: Füllen eines Kombinationsfeldes mit einer dynamisch zusammengestellten Wertliste

Dim i As Integer
Dim strJahre As String
For i = Me!txtErstesJahr To Me!txtLetztesJahr
    strJahre = strJahre & i & ";"
Next i
Me!cboJahreAusWertliste.RowSourceType = "Wertliste"
Me!cboJahreAusWertliste.RowSource = strJahre
Me!cboJahreAusWertliste.DefaultValue = Me!txtAktuellesJahr

Anschließend werden die Eigenschaften Herkunftstyp auf Wertliste und Datensatzherkunft auf den soeben zusammengesetzten Ausdruck eingestellt. Damit das Kombinationsfeld das im Textfeld txtAktuellesJahr enthaltene Jahr anzeigt, stellen Sie seine Eigenschaft DefaultValue direkt auf den im Textfeld enthaltenen Wert ein.

Dies funktioniert auch für die Anzeige von Daten in mehr als einer Spalte. Access fügt die in dem Wertlistenausdruck enthaltenen Elemente dann von links nach rechts und dann von oben nach unten in das Kombinationsfeld ein.

Kombinationsfeld füllen per Recordset

Seit Access XP (2002) können Sie Formularen und Steuerelementen wie dem Kombinationsfeld und dem Listenfeld per VBA Recordsets zuweisen. Das eröffnet verschiedene Möglichkeiten.

Die naheliegendste ist das Erzeugen eines Recordsets auf Basis einer Tabelle oder Abfrage und das anschließende Zuweisen zur Eigenschaft Recordset des Kombinationsfelds. Dies ließe sich ausnutzen, um die enthaltenen Daten per Code zu sortieren, zu filtern oder anderweitig zu manipulieren.

Die zweite in Kombination mit ADO-Recordsets interessante Möglichkeit ist der Einsatz ungebundener Recordsets. Dabei handelt es sich um ein ganz normales Recordset, das allerdings nicht auf einer Tabelle basiert, sondern komplett per VBA-Code erzeugt wird – was nicht nur das Füllen mit den gewünschten Daten, sondern auch das Definieren der enthaltenen Felder betrifft.

Sie können so eine Reihe von Daten, beispielsweise Namen, in einem Recordset speichern und die Methoden und Eigenschaften des Recordset-Objekts ausnutzen, um die darin enthaltenen Daten zu sortieren.

Im Beispiel aus Listing 2 erzeugen Sie zunächst ein leeres Recordset-Objekt und weisen diesem mit der Append-Methode ein Integer-Feld namens Jahr hinzu. Nach dem Einstellen einiger Recordset-Eigenschaften wie CursorLocation, LockType und CursorType (ohne dies funktioniert es nicht!) öffnet die Open-Methode das Recordset. Wie im Wertlisten-Beispiel erfolgt das Zusammenstellen der Datenquelle innerhalb einer For Next-Schleife, die diesmal allerdings keine Zeichenkette zusammensetzt, sondern pro Jahr einen neuen Datensatz mit der Jahreszahl im ungebundenen Recordset anlegt.

Listing 2: Füllen eines Kombinationsfeldes mit den Daten eines ungebundenen Recordsets

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

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar