Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinationsfeld von vorherigen Feldern abhängig

Begonnen von jasmin, Oktober 22, 2018, 20:39:04

⏪ vorheriges - nächstes ⏩

jasmin

Hallo zusammen,

ich erstelle gerade mein erstes Access-Formular und stoße auf einige Schwierigkeiten.
Ich habe das Problem, dass ich zwei Felder habe deren Auswahlmöglichkeiten gegenseitig von einander abhängen.
Als Beispiel habe ich z.B. als erste Feld "Quartal" und als zweites Feld "Monat". Zusätzlich besteht ein drittes Feld mit einem Betrag.
Quartal referenziert auf eine Tabelle mit den Werten Q1, Q2, Q3, Q4. In der Tabelle Monat sind entsprechen die zwölf Monate Januar, Februar usw. eingetragen.
Wenn ich nun in meinem Formular im ersten Feld Q2 auswähle, soll sich die Auswahl des Kombinationsfeld so anpassen, dass ich nur zwischen April, Mai und Juni auswählen kann.
Die tbl_Quartal besteht aus ID und Bezeichnung. Die tbl_Monat aus der MonatsID, Monatsbezeichnung und zugehöriger QuartalsID.
Die Beträge werden unter Angabe der QuartalID und MonatsID in der tbl_Beträge eingefügt.
Hierfür habe ich in der tbl_Beträge jeweils eine 1:n-Beziehung zu der Quartals- und MonatsID hinterlegt.

Für mein Formular habe ich als Datensatzquelle eine Abfrage erstellt, die nur die ausgeschrieben Bezeichnungen von Quartal und Monat enthält.

Wenn ich ein Quartal auswähle, wird die Wertliste der Monate leider nicht angepasst. Es erscheinen immer alle 12 Monate im Kombinationsfeld unabhängig davon welches Quartal vorher ausgewählt wurde.
Da ich es einfach nicht hin bekomme, habe ich nun schon versucht für jedes Quartal ein eigenes Formular zu erstellen und die Monate als feste Wertlisten im Kombinationsfeld zu hinterlegen (Ich habe bei der Anlage der Wertliste speichern in Monatsbezeichnung gewählt und die Werte selber eingetragen, also nicht auf die tbl_Monat verwiesen). Nun hatte ich das Problem, dass nachdem ich das Formular für Quartal 1 mit der Wertliste "Januar, Februar, März" und schließlich ein zweites Formular für Quartal 2 mit der Wertliste "April, Mai, Juni" angelegt habe, in beiden Formularen die zuletzt eingetragene Wertliste übernommen wurde.

Ich weiß leider überhaupt nicht, wie ich das lösen kann und bin auch beim Googeln noch nicht auf eine Lösung gestoßen.
Ich habe schon überlegt, ob ich ggf. mich Nachschlagefeldern arbeiten muss? :o

Bin über jede Hilfe dankbar!! :)
Grüße
Jasmin

DF6GL

#1
Hallo,


vergiss Nachschlagefelder...

bei abhängigen Kombifeldern sind Tabellen (zumindest eine in diesem Fall) statt Wertelisten erforderlich.  Das Prinzip findest Du hier:

http://www.donkarl.com/?FAQ4.36


Kombifeld "cmbQuartal" mit Werteliste:  (alternativ: Deine Quartals-Tabelle, dann aber Nutzung der Schlüsselfelder)


Datensatzherkunft: Q1;Q2;Q3;Q4
gebundene Spalte: 1
Spaltenanzahl: 1
Spaltenbreiten:  1

Kombifeld "cmbMonat" mit Tabelle (Abfrage):

Tabelle tbl_Monate:

Monatszahl    MonatName  Quartalname

1                     Januar            Q1
2                     Februar          Q1
3                     März              Q1
4                     April               Q2
....



Datensatzherkunft: Select Monatszahl, Monatsname  from tbl_Monate where Quartalname ='" & [cmbMonat] & "'"


gebundene Spalte: 1
Spaltenanzahl:2
Spaltenbreiten: 1cm;4cm


Weiterverarbeitung: mit Spalte0 des Kombis (Monatszahl)



Wenn die Beziehungen korrekt aufgebaut sind,

ZitatDie Beträge werden unter Angabe der QuartalID und MonatsID in der tbl_Beträge eingefügt.

ist QuartalID in dieser Tabelle überflüssig. Das Quartal eines Monats ergibt sich aus der tbl_Monate.

jasmin

Hallo Franz,

erstmal danke für deine schnelle und vor allem ausführliche Antwort.

So ganz klappt es bei mir immer noch nicht. Ich werde es morgen früh nochmal versuchen, im Moment kriege ich es glaub ich nicht mehr auf die Reihe.

Zwei Fragen habe ich allerdings schon vorab. Müsste die Select-Anweisung nicht auf das zuvor eingestellte Kombinationsfeld cmbQuartal verweisen? [Habe natürlich auch das bei mir schon mal ausprobiert, das hat es nicht gelöst. :-[ Mir ist das nur vom Verständnis her nicht ganz klar ]

Zitatist QuartalID in dieser Tabelle überflüssig. Das Quartal eines Monats ergibt sich aus der tbl_Monate.

Ich habe die ganze Tabelle tbl_Quartal nun rausgeschmissen, da ich diese Werte ja nun im Kombifeld (cmbQuartal) fest hinterlege.

Was genau meinst du mit:
ZitatWeiterverarbeitung: mit Spalte0 des Kombis (Monatszahl)
Muss ich da vielleicht noch irgendetwas einstellen, wovon ich noch keine Idee habe?
Ich habe aus der Anleitung von dem Link noch den Requery-Befehl nach Aktualisierung von cmbQuartal ergänzt, da ich dachte, dass es bisher vielleicht nur nicht aktualisiert wurde.

Vielen Dank schon bis hierhin! :) ich probiere es wie gesagt morgen nochmal und melde mich, ob es klappt.
Gute Nacht
Jasmin

Lachtaube

@jasmin,

aus praktischer Sicht eines Anwenders, der sich mit dem Gregorianischen Kalender auskennt (also quasi jeder, der dem abendländischen Kulturkreis zuzurechnen ist), trägt einen Monatswert vermutlich am schnellsten ein, indem er einen Zahlenwert zwischen 1 und 12 eingetippt wird - ohne dazu ein oder zwei Kombifeld aufklappen zu müssen. Dazu braucht es auch kein Quartalswissen - allerhöchstens eine Gültigkeitsregel, die den Zahlenbereich prüft. Die Funktion MonthName() wäre geeignet, einen Monatsnamen aus dem Wert in (optional abgekürzter) Textform entsprechend der in der Windows-Systemsteuerung vorliegenden Einstellungen zu Datumsangaben zu bestimmen und anzuzeigen.

Wird auch noch ein Datum aus dem betreffenden Monat im Datensatz eingetragen, sollte man auf den Monatswert gänzlich verzichten, weil sich auch daraus Monat und Quartal, wenn es das Auge wünscht, leicht bestimmen lässt.

Eine gänzlich andere Geschichte wäre es, für analytische Zwecke eine Tabelle mit Zeit-Dimensionen zu pflegen (geschieht meist automatisch), in der gewünschte Zeitraster (i.d.R. sind das Tage, aber auch andere Intervalle sind möglich) über einen bestimmten Zeitraum zusammengetragen werden. Hier sind redundate Informationen (sorgfältig indiziert) sogar erwünscht, um Abfragen zu vereinfachen und/oder in der Ausführung zu beschleunigen.

Bessere Anwendungsfälle für kaskadierende Listen-oder Kombifelder wären aus meiner Sicht z.B. einen Mitarbeiter eines Vorgesetzten oder einer Abteilung, eine Zutat eines Küchenrezepts, eine Ortsgemeinde eines Landkreises, ein Metall einer Legierung und v.a. (auch mehrstufig) auszuwählen.

Die Techniken zur Umsetzung der Kaskade können vielseitig sein und reichen über die Veränderung der RowSource (Datensatzherkunft), die Verwendung einer Abfrage mit Formularparametern oder eigenen VBA-Funktionen als Parameter bis zur Zuweisung eines Recordsets an das Listen- oder Kombifeld. Wird in demselben Formular auch navigiert, muss jeweils die Kaskade in umgekehrter Reihenfolge aufgelöst werden, damit das Steuerelement zur Anzeige richtig gefiltert vorliegt.
Grüße von der (⌒▽⌒)

jasmin

Hallo,

Mit viel rumprobieren hat es nun geklappt. ;D
Ich hatte Schwierigkeiten das Kombinationsfeld anzusprechen und habe das noch viel rumprobiert mir Leerzeichen, Anführungsstrichen etc. - irgendwann hast dann geklappt. Muss noch etwas Üben mit Access bis ich das verstehe.
Danke für die Hilfe!

Gruß
Jasmin

@Lauchtaube: Danke für den Hinweis.
ZitatAls Beispiel habe ich z.B. als erste Feld "Quartal" und als zweites Feld "Monat".
Es war nur für mich zum Üben gedacht. Aber ja ein sinnvolles Beispiel ist das nicht.