Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abhängige Kombi-Felder aktualisieren

Begonnen von castor1, Februar 24, 2015, 09:36:14

⏪ vorheriges - nächstes ⏩

castor1

Hallo!

Als absoluter rookie (!!) habe ich folgendes Problem zu meistern: In einem UFo habe ich drei abhängige Kombi-felder (cboAGOrganisation-->cboAGAbteilung-->cboAGUnterabteilung), deren Werte in je einer Tabelle stehen. In cboAGOrganisation werden alle Organisationen zur Auswahl aus der entsprechenden Tabelle angezeigt. Nach Auswahl werden in cboAGAbteilung nur jene Abteilungen aus einer Tabelle angezeigt, die der ausgewählten Organisation zugehören. Das habe ich mittels folgender Select-Anweisung in den Eigenschaften-Datensatzherkunft des cbo geschafft:
SELECT [tbl_AGAbteilung].[ID_AGAbteilung], [tbl_AGAbteilung].[txt_Name], [tbl_AGAbteilung].[ID_AGOrganisation] FROM tbl_AGAbteilung WHERE ID_AGOrganisation=cboAGOrganisation;

Mit dem dritten cbo (cboAGUnterabteilung) bin ich gleich verfahren, also:
SELECT [tbl_AGUnterabteilung].[ID_AGUnterabteilung], [tbl_AGUnterabteilung].[txt_Name], [tbl_AGUnterabteilung].[ID_AGAbteilung], [tbl_AGUnterabteilung].[ID_AGOrganisation] FROM tbl_AGUnterabteilung WHERE ID_AGAbteilung=cboAGAbteilung;

Damit die Einträge in den cbo nun je nach Auswahl aktualisiert werden, habe ich zunächst folgenden Code in die Ereignisprozedur "nach Aktualisierung" von cboAGOrganisation Code eingefügt:
Private Sub cboAGOrganisation_AfterUpdate()
cboAGAbteilung.Requery End Sub


In die Ereignisprozedur "nach Aktualisierung" von cboAGAbteilung habe ich folgenden Code eingefügt:
Private Sub cboAGAbteilung_AfterUpdate()
cboAGUnterabteilung.Requery
End Sub


Nun verhält es sich folgendermaßen: Wenn ich cboAGOrganisation aktualisiere, dann aktualisiert sich cboAGAbteilung, aber nicht auch cboAGUnterabteilung. Wie schaffe ich es, dass nach Aktualisierung von cboAGOrganisation BEIDE unterstehenden cbos aktualisiert werden?

Danke für eure Anregungen!

MaggieMay

Hallo,

nach Aktualisierung des 1. Kombifeldes sollten Kombi-2 und Kombi-3 eigentlich leer sein bzw. geleert werden. Erst nach Eingabe in Kombi-2 aktualisiert sich die Datensatzherkunft in Kombi-3, das sollte doch passen.
Freundliche Grüße
MaggieMay

DF6GL

Hallo,


Zitatdann aktualisiert sich cboAGAbteilung, aber nicht auch cboAGUnterabteilung.

Welchen Sinn hätte das denn? Es wurde ja noch keine AGAbteilung ausgewählt...

Eine von mehreren "Lösungen" wäre, das 3. Kombi erst nach der Auswahl im 2. Kombi auf sichtbar umzuschalten.

castor1

Hallo und danke für die Antwort!
Prinzipiell passt das auch. Aber wenn ich etwa Kombi 1 auswähle, dann dazu Kombi 2 und Kombi 3 auswähle und DANN nochmal Kombi 1 ändere, dann aktualisiert sich zwar Kombi 2 aufgrund der Auswahl in Kombi 1, aber in Kombi 3 bleibt der vorherige Eintrag, der nun nicht mehr zur Auswahl in Kombi 1 passt. Daher sollt bei Änderung des Kombi 1 auch immer Kombi 3 geleert werden.

Danke nochmal für die Antworten!

DF6GL

Hallo,

versuch mal:


Private Sub cboAGOrganisation_AfterUpdate()
cboAGAbteilung.Requery
cboAGUnterabteilung.Requery
End Sub



MaggieMay

oder so:Private Sub cboAGOrganisation_AfterUpdate()
    Me.cboAGAbteilung.Requery
    Me.cboAGUnterabteilung = Null
End Sub


Zusätzlich:
Die Auswahl in Kombi-3 ohne vorherige Auswahl in Kombi-2 sollte unterbunden werden.
Entsprechendes gilt für Kombi-2.
Freundliche Grüße
MaggieMay

castor1

@DF6GL: das war mein erster Ansatz, funktioniert allerdings nicht.

@MaggieMay: damit wird zwar die Anzeige im Kombi 3 geleert, im Dropdown bleiben aber die "alten" Wahlmöglichkeiten.
ZitatDie Auswahl in Kombi-3 ohne vorherige Auswahl in Kombi-2 sollte unterbunden werden.
Wie kann ich das bewerkstelligen?

LG

MaggieMay

Zitatim Dropdown bleiben aber die "alten" Wahlmöglichkeiten.
Das ist richtig, aber das siehst du ja nicht, und nach Auswahl in Kombi-2 wird es aktualisiert.

ZitatWie kann ich das bewerkstelligen?
Bspw. so:Private Sub cboAGUnterabteilung_BeforeUpdate(Cancel As Integer)
    If IsNull(Me.cboAGAbteilung) Then
        MsgBox "Bitte zuerst die Abteilung auswählen!"
        Cancel = True
        Me.cboAGAbteilung.SetFocus
    End If
End Sub
Freundliche Grüße
MaggieMay

DF6GL

Hi,

noch ein bisschen Schmalz:


SELECT [tbl_AGUnterabteilung].[ID_AGUnterabteilung], [tbl_AGUnterabteilung].[txt_Name], [tbl_AGUnterabteilung].[ID_AGAbteilung], [tbl_AGUnterabteilung].[ID_AGOrganisation] FROM tbl_AGUnterabteilung WHERE ID_AGAbteilung=nz([cboAGAbteilung],0)



bei  Deinem "ersten Ansatz".

Vernünftige Lösungen wären, das 2. und 3. Kombi immer erst nach Auswahl des vorangegangenen auf sichtbar zu setzen oder die Datensatzherkunft des/der folgenden Kombis jeweils in den Afterupdate-Prozeduren mit einem passenden SQL-String zu versorgen.

castor1

Liebe MaggieMay, lieber Franz,

danke für eure Tipps, die mir sehr weitergeholfen haben!

Alles Gute,
castor