Neuigkeiten:

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

Mobiles Hauptmenü

Listenfeld abhängig von Kombinationsfeld

Begonnen von yaya3, Juni 10, 2015, 10:15:45

⏪ vorheriges - nächstes ⏩

yaya3

Hallo,

ich stehe vor einer Herausforderung, mit der ich nicht so klar komme.

Ich habe mal schnell ein Beispiel von meinem Datenbankmodell erstellt ( siehe Anhang), damit Ihr euch das besser vorstellen könnt.

Tabelle Automarke(Daimler), Klassen(A-Klasse), Version(1.4) sind kombinationsfelder die abhängig sind.
Nun möchte ich in meinem Modalen Dialogfeld, ein Listenfeld(mehrspaltig) für die Tabelle Zulassung erstellen, das abhängig von dem Kombinationsfeld-Version ist. Die Tabelle Testvorgang ist auch in Abhängigkeit zu dem Kombinationsfeld Version, die ich mit einer Abfrage(mit einem Parameter) in ein Textfeld füllen konnte.

Wie würde das funktionieren?

Über eure Unterstützung würde ich mich sehr freuen.

Gruß
yaya


MaggieMay

Hi,

dazu brauchst du eine Abfrage, in der die Tabellen "Zulassung" und "Testvorgang" verknüpft und nach "Zwischentabelle_FK" gefiltert werden.

Wo genau liegt dein Problem?
Freundliche Grüße
MaggieMay

yaya3

ich schaff es nicht die Abfrage nach der combobox zu filtern, also das nur die von der combobox ausgewählten werte im Listenfeld angezeigt werden.
Bei mir werden immer nur alle Werte im Listenfeld angezeigt.
ich stehe auf dem schlauch.  :-X :-[

lg
yaya

MaggieMay

Hi,

zeige bitte deinen Versuch (-> SQL-Code), dann haben wir eine gemeinsame Grundlage.
Und nenne den Namen des Kombifeldes, nach dem in der Abfrage gefiltert werden soll.
Freundliche Grüße
MaggieMay

yaya3

Hi ,

SELECT Zwischentabelle.Zwischentabelle_ID, Testvorgang.Testvorgang_ID, Testvorgang.Zwischentabelle_FK, Zulassung.Zulassung_ID, Zulassung.Testvorgang_FK,Zulassung.Zulassungsnummer, Zulassung.Zertifikat, Zulassung.Zula_Datum FROM ((Version INNER JOIN Zwischentabelle ON Version.Version_ID = Zwischentabelle.Version_FK) INNER JOIN Testvorgang ON Zwischentabelle.Zwischentabelle_ID = Testvorgang.Zwischentabelle_FK) INNER JOIN Zulassung ON Testvorgang.Testvorgang_ID = Zulassung.Testvorgang_FK
WHERE Testvorgang.Zwischentabelle_FK =Zwischentabelle.Zwischentabelle_ID
   So zeigt er mir alle an. 

jedoch möchte ich in meine combobox also cmbVersion einen Wert auswählen und das Listenfeld soll mir die zugehörigen Werte anzeigen.

ich habe z.b. beim Testvorgang die Textfelder mit einem Parameter füllen können. Jedoch funktioniert das beim Listenfeld nicht.
Also bei einem Textfeld habe ich z.b. in die Abfrage : Where Testvorgang.Zwischentabelle_FK = [@TS1Datum] also Parameter eingesetzt und habe bei VBA folgendes geschrieben:  Set qdf = CurrentDb.QueryDefs("Abfrage_TS1_Datum")
qdf.Parameters("@TS1Datum") = Form_Admin_Form.cmbVersion.Column(1)
Form_Anzeigen_Test_Admin.txttest1 = qdf.OpenRecordset()(1)
qdf.Close


Das war um einiges einfacher.

Ich bedanke mich für deine Mühe.

Irgendwie habe ich das noch nicht so drauf.  :-\

LG
yaya

MaggieMay

Welche ist die gebundene Spalte des Kombifeldes und auf welches Datenfeld bezieht sie sich?
Wenn es die Version_ID liefert, so kannst du die RowSource des Listenfeldes folgendermaßen einstellen:
SELECT
Zwischentabelle.Zwischentabelle_ID,
Testvorgang.Testvorgang_ID, Testvorgang.Zwischentabelle_FK,
Zulassung.Zulassung_ID, Zulassung.Testvorgang_FK, Zulassung.Zulassungsnummer, Zulassung.Zertifikat, Zulassung.Zula_Datum
FROM ((Version INNER JOIN Zwischentabelle ON Version.Version_ID = Zwischentabelle.Version_FK)
INNER JOIN Testvorgang ON Zwischentabelle.Zwischentabelle_ID = Testvorgang.Zwischentabelle_FK)
INNER JOIN Zulassung ON Testvorgang.Testvorgang_ID = Zulassung.Testvorgang_FK
WHERE Version.Version_ID = [Forms]![Admin_Form]![cmbVersion]

Dann brauchst du nach Änderung der Auswahl nur ein
Me.listenfeld.Requeryauszuführen.
Freundliche Grüße
MaggieMay

yaya3

hi ,

hat funktioniert.

Select ....
Where Zwischentabelle.Zwischentabelle = " & Form_Admin_Form.cmbVersion.column(1)

funktioniert teilweise, ich denke hab da ein paar Fehler in der DB die ich verbessern muss.

Vielen Dank für deine Mühe   ;D

MaggieMay

Hi,

was wird hier womit verglichen:
ZitatWhere Zwischentabelle.[color=red]Zwischentabelle [/color]= " & Form_Admin_Form.[color=red]cmbVersion.column(1)[/color]
?
Freundliche Grüße
MaggieMay

yaya3

Hi,

sorry sollte zwischentabelle.zwischentabelle_ID = " & Form_Admin_Form.cmbVersion.column(1) --> bedeuten.

bei cmbversion.column(1) = beinhaltet die version_ID und die abfrage vergleicht die Auto-werte ab.
oder :/ :o

eigentlich bin ich nur froh das es funktioniert   ;D ....

yaya3

Noch eine kurze Frage,

Das Feld Zulassung.Zertifikat sind in der DB hinterlegte Hyperlinks(PDF) die auf meiner Festplatte gespeichert sind. Da ich nun die Zertifikate in meinem Listenfeld anzeiegn lassen kann, möchte ich gerne per klick diese auch einzeln öffnen. Geht das ?

:o

MaggieMay

Zitatund die abfrage vergleicht die Auto-werte ab.
oder :/

Welchen Sinn sollte es wohl haben, die Autowerte zu vergleichen?  ???
Du musst gleiches mit gleichem vergleichen, also bspw. einen Primärschlüssel mit dem Fremdschlüssel - so wie ich es dir übrigens vorgemacht hatte.

Wie lautet denn eigentlich die Datensatzherkunft des Kombifeldes?
Freundliche Grüße
MaggieMay

yaya3

stimmt vielen dank,

habe es jetzt verbessert... testvorgang.zwischentabelle_FK = cmbVersion.colum(1) ... also jetzt funktioniert alles einwandfrei ohne das Fehler auftauchen :)  ;D

MaggieMay

Da habe ich aber so meine Zweifel...

Wie steht es denn hiermit:
Zitat von: MaggieMay am Juni 18, 2015, 15:42:57
ZitatWie lautet denn eigentlich die Datensatzherkunft des Kombifeldes?
Freundliche Grüße
MaggieMay

yaya3

Hi,
Datensatzherkunft
SELECT Version.Version_Name, Zwischentabelle.Zwischentabelle_ID, Zwischentabelle.Auto_klasse_FK, Klassenname.Auto_Klasse_ID
FROM Klassenname INNER JOIN (version INNER JOIN Zwischentabelle ON version.version_ID = Zwischentabelle.version_FK) ON Klassenname.Auto_Klasse_ID = Zwischentabelle.Auto_Klasse_FK
WHERE (((Zwischentabelle.Auto_Klasse_FK)<>False))


und in vba :
Me.cmbVersion.RowSource = " SELECT version.Version,Zwischentabelle.Zwischentabelle_ID, Zwischentabelle.Auto_Klasse_FK, Klassenname.Auto_Klasse_ID " & _
"FROM Klassenname INNER JOIN ( version " _
& " INNER JOIN Zwischentabelle " _
& " ON version.version_ID = " _
& "Zwischentabelle.version_FK) " _
& " ON Klassenname.Auto_Klasse_ID = " _
& " Zwischentabelle.Auto_Klasse_FK " _
& "WHERE Zwischentabelle.Auto_Klasse_FK = " & Me.cmbKlasse



PS: Das Thema VBA-Access ist für mich neu.
Bisher habe ich nur über das Forum hier oder durch "herumspielen und ausprobieren" alles zum laufen gebracht.

Vielen Dank für deine Mühe MaggieMay

LG
yaya

MaggieMay

#14
Dann stimmt das also gar nicht:
Zitat von: yaya3 am Juni 18, 2015, 15:22:41
bei cmbversion.column(1) = beinhaltet die version_ID
denn die zweite Spalte enthält die Zwischentabelle_ID.
Aber Ok, dann mag das jetzt wohl passen.

BTW:
Wenn du das Kriterium via Bezug auf das Kombifeld direkt in die Abfrage schreibst, musst du die RowSource nicht mehr ändern, dann genügt es, das Kombifeld nach Änderung der Auswahl zu aktualisieren.
Aber das sagte ich glaub ich schon mal...
Freundliche Grüße
MaggieMay