Sicherlich haben auch Sie bereits häufig Kombinationsfelder auf Ihren Formularen eingesetzt. Gedacht als sinnvolle Eingabehilfe, können sie die Auswahl von Adressen, Bestellvorgängen, Kategorien, Suchkriterien und ähnlichen Informationen wesentlich beschleunigen. In der Praxis zeigt sich allerdings sehr schnell, dass ein Kombinationsfeld alleine noch kein Garant für komfortable Bedienung ist. Vor allem bei einer zu großen Anzahl von Einträgen geht die Übersicht verloren und Access büßt deutlich an Geschwindigkeit ein.
Sie können den Bedienungskomfort Ihrer Datenbanken daher deutlich verbessern, wenn Sie Möglichkeiten schaffen, den Inhalt des Kombinationsfeldes nach bestimmten Kriterien einzuschränken. Also beispielsweise:
— Es werden nur Artikel aus ganz bestimmten Kategorien angezeigt.
— Sie listen nicht alle Bestellungen auf, sondern lediglich diejenigen, die in ein bestimmtes Land oder eine Stadt verschickt wurden.
— Sie beschränken die Liste der Gesamtbestellungen auf die Vorgänge, die mit zwei ganz bestimmten Nummern beginnen.
Da es viele verschiedene Anwendungsmöglichkeiten für Kombinationsfelder gibt, sind auch unterschiedliche Lösungsansätze notwendig, um die angebotenen Einträge auf Grundlage bestimmter Kriterien einzuschränken. Im Folgenden möchten wir Ihnen daher zwei besonders interessante Techniken vorstellen, die Sie ganz nach Bedarf in Ihren eigenen Anwendungen einsetzen können.
Tipp 1: Kombinationsfelder verknüpfen
Eine besonders beliebte Lösung für mehr Übersicht ist der Einsatz eines zweiten Kombinationsfeldes mit einer übergeordneten Kategorie. Sie machen also den Inhalt eines Kombinationsfeldes davon abhängig, welcher Eintrag in einem anderen Kombinationsfeld ausgewählt wurde.
In unserem ersten Beispiel arbeiten wir mit einem Kombinationsfeld zur Artikelauswahl. Da die Gesamtliste zu umfangreich ist, gibt es zusätzlich ein Feld KATEGORIE. um die angezeigten Artikel einzuschränken:
1. Öffnen Sie das Formular „frmKombi- Felder1“.
2. Markieren Sie einen beliebigen Eintrag im Kombinationsfeld KATEGORIE
3. Wenn Sie nun das Kombinationsfeld ARTIKEL öffnen, werden nur Einträge angezeigt, die zu der gewählten Kategorie gehören.
Die Funktionsweise ist schnell erklärt: Zunächst einmal wird das Kombinationsfeld KATEGORIE mithilfe der folgenden SQL-Abfrage
Select [Kategorie-Nr], [Kategoriename] From [Kategorien];
mit der Nummer und den Namen aller vorhandenen Kategorien gefüllt. Wichtig dabei ist, dass die Kategorienummer durch das Setzen der Spaltenbreite auf 0 cm komplett ausgeblendet wird. Schließlich ist nur der Name für die Auswahl im Kombinationsfeld interessant; aber die Nummer ist der eindeutige Schlüssel, über den eine Auswahl der entsprechenden Artikel erfolgen kann. Die Eigenschaft „Gebundene Spalte“ haben wir auf „1“ gesetzt; Access liefert also als Ergebnis den Inhalt der ersten Spalte in der markierten Zeile und dabei handelt es sich dann um die ausgeblendete Kategorienummer.
Dieses Ergebnis können Sie sich zunutze machen, um auf dieser Grundlage die zugehörigen Artikel auszuwählen. Dementsprechend sieht die Datensatzherkunft für das Kombinationsfeld ARTIKEL folgendermaßen aus:
Ausgewählt werden also Name und Nummer der Artikel, deren Kategorienummer der im Kombinationsfeld „cboKategorie“ entspricht. Der entsprechende Bezug sieht folgendermaßen aus:
[Formulare]![frmKombiFelder1]! [cboKategorie]
Zu guter Letzt müssen Sie noch sicherstellen, dass die Datensatzherkunft des zweiten Kombinationsfeldes automatisch aktualisiert wird, sobald eine neue Kategorie gewählt wurde.
Dem Ereignis „Nach Aktualisierung“ wurde daher die folgende Prozedur zugewiesen:
Private Sub cboKategorie_AfterUpdate()
cboArtikel.Requery
End Sub
Die Übertragung dieser Technik auf Ihre Datenbanken ist mit vier Schritten möglich:
1. Ausgangspunkt sind zwei Tabellen, die über ein eindeutiges Feld – wie in diesem Fall die Kategorienummer – miteinander verknüpft sind.
2. Das erste Kombinationsfeld, das den Inhalt des zweiten Feldes steuern soll, füllen Sie mit einer Liste der möglichen Kriterien, wobei Sie als Ergebnis immer das Verknüpfungsfeld zurückliefern müssen.
3. Weisen Sie dem Ereignis „Nach Aktualisierung“ des ersten Kombinationsfeldes eine Ereignisprozedur zu, die das zweite Kombinationsfeld aktualisiert (Requery-Methode).
4. Nun definieren Sie die Datenherkunft des zweiten Kombinationsfeldes so, dass der Inhalt des ersten Feldes als Kriterium zur Auswahl der angezeigten Datensätze verwendet wird.
Tipp 2: Kriterien über Optionsfelder festlegen
Immer dann, wenn Sie mit wenigen klar einzugrenzenden Kriterien arbeiten, können Sie ein Kombinationsfeld besonders schnell über Optionsfelder einschränken: Der Inhalt der Liste richtet sich danach, welche Option angeklickt wurde. Ein entsprechendes Beispiel zeigt das Formular „frmKombiFelder2“.
Klicken Sie einen beliebigen Versender an und öffnen Sie dann das Kombinationsfeld BESTELLUNGEN: Je nachdem, welche Option Sie aktiviert haben, werden jeweils die Bestellungen angezeigt, die über den entsprechenden Versender verschickt wurden.
Sie benötigen lediglich eine einzige VBA-Prozedur, um diesen Effekt zu erzielen. Sie ist dem Ereignis „Nach Aktualisierung“ der Optionsgruppe zugeordnet und sieht wie in „Listing 1“ beschrieben aus.
Die Optionsgruppe „ogrpVersender“ liefert einen Wert zwischen 1 und 4, der jeweils dem aktivierten Optionsfeld entspricht. Abhängig von dem Ergebnis, wird der Datensatzherkunft des Kombinationsfeldes eine entsprechende SQL-Zeichenkette zugewiesen.
Zusätzlich verwenden wir in dem Beispiel noch eine Prozedur, die automatisch beim Öffnen des Formulars die erste Option aktiviert:
Private Sub Form_Open(Cancel As Integer)
ogrpVersender.Value = 1
End Sub
Wenn Sie auch in Ihren eigenen Datenbanken Optionsfelder zur Einschränkung der Kombinationsfeld-Liste einsetzen möchten, erstellen Sie eine Prozedur nach der oben gezeigten Struktur. Die Select- Case-Konstruktion ist dabei die einfachste Möglichkeit, um die einzelnen Werte abzufragen und abhängig vom Ergebnis eine entsprechende Datensatzherkunft festzulegen.
Außerdem müssen Sie einige Eigenschaften des Kombinationsfeldes manuell festlegen: Spaltenbreiten, gebundene Spalten, Spaltenanzahl etc. werden von der Prozedur nicht verändert, weil sie immer gleich bleiben.
Listing 1
Private Sub ogrpVersender_AfterUpdate()
Select Case ogrpVersender
Case 1
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen;“
Case 2
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 1;“
Case 3
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 2;“
Case 4
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 3;“
End Select
End Sub