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 5/2014.

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

Kontextmenü statt Kombinationsfeld

Das Kombinationsfeld ist ein treuer Diener in fast allen Situationen. Manchmal allerdings kann man es nicht sinnvoll einsetzen – zum Beispiel in einem Formular in der Datenblattansicht oder Endlosansicht, wenn das Kombinationsfeld Daten anzeigen soll, die vom Wert eines anderen Kombinationsfeldes des gleichen Datensatzes abhängen. Aber es gibt eine Lösung – wenn auch nicht in Form eines Kombinationsfeldes. Wir zeigen die zur Auswahl stehenden Daten einfach per Kontextmenü an! Wie dies gelingt, zeigt der vorliegende Beitrag.

Problem: Abhängige Kombinationsfelder

Früher oder später stößt jeder Access-Entwickler auf das Problem, dass er abhängige Daten mit zwei Kombinationsfeldern darstellen soll – und zwar in der Endlos- oder Datenblattansicht eines Formulars.

Die Verwendung zweier abhängiger Kombinationsfelder in der Formularansicht ist kein Problem und wird vielfach genutzt. Dabei geht es darum, in einem ersten Kombinationsfeld einen Wert auszuwählen (beispielsweise eine Automarke) und in einem zweiten Kombinationsfeld, dem abhängigen Kombinationsfeld, nur noch diejenigen Einträge anzuzeigen, die zu dem im ersten Kombinationsfeld ausgewählten Eintrag passen (also etwa ein Fahrzeugmodell). Dazu wird nach dem Auswählen des Datensatzes im ersten Kombinationsfeld die Datensatzquelle im zweiten Kombinationsfeld so gefiltert, dass dieses nur noch die relevanten Einträge liefert.

In Endlos- oder Datenblattansichten taucht jedoch das Problem auf, dass die meisten Eigenschaften von Steuerelementen jeweils für alle angezeigten Datensätze gleich sind – und dazu gehört auch die Datensatzherkunft von Kombinationsfeldern. Welche Probleme das mit sich bringt, schauen wir uns gleich kurz an. Hier benötigen wir eine Alternative zur Auswahl der Daten für das abhängige Tabellenfeld.

Beispieltabellen

Zunächst schauen wir uns die Beispieltabellen an. Dazu greifen wir das bereits erwähnte Beispiel der Fahrzeuge auf (Tabellen siehe Bild 1). Die Fahrzeuge werden in der Tabelle tblFahrzeuge gespeichert. Zu jedem Fahrzeug können Sie einen Hersteller auswählen sowie ein Modell. Für beide haben wir entsprechende Lookup-Tabellen erstellt (tblHersteller und tblModell). Allerdings gibt es natürlich nicht jedes Modell bei jedem Hersteller. Deshalb fügen wir der Tabelle tblModelle noch ein Nachschlagefeld hinzu, welches die Auswahl des Herstellers ermöglicht, zu dem das Modell gehört.

Tabellen mit abhängigen Datensätzen

Bild 1: Tabellen mit abhängigen Datensätzen

In der Tabelle tblFahrzeuge kann man nun natürlich dennoch Kombinationen aus Hersteller und Modell auswählen, die gar nicht in der Tabelle tblModelle vorgesehen sind.

Abbildung in der Formularansicht

In der Formularansicht eines Formulars sieht das standardmäßig nicht anders aus. Hier wird das Kombinationsfeld zur Auswahl der Modelle nicht nach dem zuvor ausgewählten Hersteller gefiltert (s. Bild 2).

Auch das Kombinationsfeld zeigt ungefiltert alle Datensätze an.

Bild 2: Auch das Kombinationsfeld zeigt ungefiltert alle Datensätze an.

In dieser Ansicht lässt sich aber leicht Abhilfe schaffen. Dazu müssen wir lediglich die Datensatzherkunft des abhängigen Kombinationsfeldes anpassen.

Dies erledigen wir in einer einfachen Version an zwei Stellen – nämlich beim Anzeigen eines jeden Datenatzes sowie nach der Auswahl eines Eintrags des Kombinationsfeldes cboHerstellerID. Die durch diese beiden Ereignisse ausgelösten Prozeduren rufen jeweils eine weitere Prozedur namens cboModelleAktualisieren auf.

Diese prüft, ob das Steuerelement cboHersteller überhaupt einen Wert enthält. Falls ja, wird die Datensatzherkunft des zweiten Kombinationsfeldes cboModelle so eingeschränkt, dass es nur solche Einträge enthält, die zum entsprechenden Hersteller gehören. Anderenfalls soll das Kombinationsfeld cboModelle einfach alle Einträge anzeigen (s. Listing 1).

Private Sub cboHerstellerID_AfterUpdate()
     Call cboModelleAktualisieren
End Sub
Private Sub Form_Current()
     Call cboModelleAktualisieren
End Sub
Private Sub cboModelleAktualisieren()
     If Not IsNull(Me.cboHerstellerID) Then
         Me!cboModellID.RowSource = "SELECT * FROM tblModelle WHERE HerstellerID = " _
             & Nz(Me!cboHerstellerID)
     Else
         Me!cboModellID.RowSource = "SELECT * FROM tblModelle"
     End If
End Sub

Listing 1: Prozeduren zum Aktualisieren abhängiger Kombinationsfelder

Dies funktioniert auch wie gewünscht, wie Bild 3 zeigt.

Anzeige abhängiger Datensätze in Kombinationsfeldern

Bild 3: Anzeige abhängiger Datensätze in Kombinationsfeldern

Abhängige Kombinationsfelder im Datenblatt oder in der Endlosansicht

Nun schauen wir uns an, was nicht wie gewünscht funktioniert. Dabei geht es um die gleiche Konstellation, allerdings mit einer anderen Darstellung – nämlich der in Listenform.

Wir betrachten zuerst die Datenblattansicht, weil wir diese ganz schnell als Alternative zur aktuellen Formularansicht aufrufen können. Das Ergebnis gleich nach dem Anzeigen dieses Formulars in der Datenblattansicht sieht wie in Bild 4 aus. Merkwürdigerweise erscheint nur noch beim ersten Datensatz das zuvor festgelegte Modell. Was ist hier schiefgelaufen? Wurden die Daten gelöscht? Ein Blick in die zugrunde liegende Tabelle zeigt, dass dies nicht der Fall ist. (Übrigens lohnt sich ein Blick in die Tabellen immer, wenn scheinbar Daten aus Kombinationsfeldern verschwunden sind – meist sind Probleme mit der Datensatzherkunft schuld daran!)

Anzeige abhängiger Datensätze in der Datenblattansicht

Bild 4: Anzeige abhängiger Datensätze in der Datenblattansicht

In der Tat liegt das Problem darin, dass beim Anzeigen die Ereignisprozedur Form_Current ausgelöst wurde, die dann die Prozedur cboModelleAktualisieren aufgerufen hat. Diese sorgt dann dafür, dass die Datensatzherkunft des Kombinationsfeldes cboModelle mit dem folgenden Ausdruck gefüllt wird:

SELECT * FROM tblModelle ­WHERE HerstellerID = 1

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.