Alternativen in Kombinationsfeldern flexibel bestimmen

Sie möchten in Ihrer Access-Anwendung zwei Kombinationsfelder einbinden. Dabei soll Access den Inhalt des einen Kombinationsfeldes abhängig von der Auswahl im zweiten Feld einschränken.

Diese komplexe Aufgabe können Sie auf zwei verschiedene Arten bewältigen. Die einfachere Lösung verwendet eine Ereignisprozedur. Leider erweist sie sich in der Praxis schnell als unflexibel. Sie sollten sie nur dann einsetzen, wenn sich die Inhalte der beiden Kombinationsfelder nicht ändern und auch keine neuen Inhalte hinzukommen.

Schreiben Sie für diese Methode eine Ereignisprozedur, die Access immer dann ausführt, wenn der Anwender den Inhalt der ersten Kombinationsbox ändert. Diese Prozedur muss den aktuellen Inhalt der Kombinationsbox lesen und in Abhängigkeit von dieser Information das Attribut »RowSource« des zugehörigen Kombinationsfeldes neu belegen. In diesem Attribut speichert Access die möglichen Alternativen.

Umständlicher, aber in der Praxis besser zu verwenden, ist die zweite Methode. Dabei müssen Sie die Kombinationsfelder auf Grundlage von zwei Tabellen und einer Abfrage definieren. In diesem Fall können Sie die Inhalte problemlos ändern, indem Sie die Datensätze in den Tabellen manipulieren.

Das folgende Beispiel beschreibt das Vorgehen anhand zweier Kombinationsfelder namens »Kategorie« und »Unterkategorie«, wobei sich die angezeigten Alternativen von »Unterkategorie« an der Auswahl im Feld »Kategorie« orientieren.

Erzeugen Sie zuerst die beiden Tabellen »tblKategorie« und »tblUnterkategorie«. Sie verfügen jeweils über einen numerischen Primärschlüssel namens »PK«, der die Datensätze eindeutig identifiziert, und ein Feld »Wert«, das den eigentlichen Namen der jeweiligen Kategorie enthält. Die Tabelle »tblUnterkategorie« besitzt zusätzlich das Feld »FK«, über das Sie die Einträge dieser Tabelle mit »Kategorie« in Verbindung bringen. Falls zum Beispiel die Kategorie »Handwerker« den Primärschlüssel »1« hat, tragen Sie im Feld »FK« jeder Unterkategorie, die zu »Handwerker« gehört, ebenfalls eine »1« ein.

Erzeugen Sie nun mit Hilfe des Assistenten auf Ihrem Formular ein Kombinationsfeld für »Kategorie«. Wählen Sie dabei auf der ersten Seite des Assistenten die Option »Das Kombinationsfeld soll die Werte einer Tabelle oder Abfrage entnehmen«. Auf der zweiten Seite markieren Sie die Tabelle »tblKategorie« und wählen anschließend auf der dritten Seite alle Felder aus. Es ist empfehlenswert, auf der vierten Seite die Option »Schlüsselspalte ausblenden« zu aktivieren. Geben Sie diesem Kombinationsfeld den Namen »cboKategorie«.

Als nächstes benötigen Sie eine neue Abfrage namens »Auswahl«. Diese Abfrage liefert als Ergebnis alle Datensätze der Tabelle »tblUnterkategorie« zurück, deren Feld »FK« mit dem Primärschlüssel der im Feld »cboKategorie« getroffenen Auswahl übereinstimmt. Fügen Sie zu diesem Zweck die Tabelle »tblUnterkategorie« der Abfrage hinzu und übernehmen Sie alle Felder in den unteren Bereich. Ergänzen Sie nun in der Zeile »Kriterien« des Feldes »FK« den Ausdruck »[Formulare]![Formularname]! [cboKategorie]«. Vorausgesetzt, Sie nutzen anstelle von »[Formularname]« den tatsächlichen Namen Ihres Formulars, bezieht sich diese Bedingung auf die aktuelle Auswahl im Feld »cboKategorie«. Da das Feld »FK« ansonsten nicht von Interesse ist, können Sie hier das Kontrollkästchen »Anzeigen« deaktivieren.

Erzeugen Sie nun auf Ihrem Formular das Kombinationsfeld »cboUnterkategorie« wie bereits für »cboKategorie« beschrieben. Wählen Sie diesmal allerdings auf der zweiten Seite des Assistenten die Abfrage »Auswahl« als Datenquelle.

Zuletzt benötigen Sie eine Ereignisprozedur, die Access ausführt, sobald Sie »cboKategorie« aktualisieren (unter den »Eigenschaften« von »cboKategorie« der Eintrag »Ereignis | Nach Aktualisierung«).


 
Private Sub cboKategorie_ AfterUpdate()
Me!cboUnterkategorie.Requery
End Sub



In dieser Prozedur aktualisieren Sie mit der »Requery«-Methode von »cboUnterkategorie« die Anzeige des abhängigen Kombinationsfeldes und schließen gleichzeitig diese Aufgabe ab. Eine Beispieldatei finden Sie unter CHIP-Code KOMBI.