Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: yaya3 am Juni 10, 2015, 10:15:45

Titel: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 10, 2015, 10:15:45
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

Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 10, 2015, 13:23:09
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?
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 17, 2015, 13:39:40
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
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 17, 2015, 14:55:58
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.
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 17, 2015, 15:43:39
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
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 17, 2015, 15:53:14
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.
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 18, 2015, 13:19:29
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
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 18, 2015, 13:53:41
Hi,

was wird hier womit verglichen:
ZitatWhere Zwischentabelle.[color=red]Zwischentabelle [/color]= " & Form_Admin_Form.[color=red]cmbVersion.column(1)[/color]
?
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 18, 2015, 15:22:41
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 ....
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 18, 2015, 15:33:32
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
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 18, 2015, 15:42:57
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?
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 18, 2015, 15:51:54
stimmt vielen dank,

habe es jetzt verbessert... testvorgang.zwischentabelle_FK = cmbVersion.colum(1) ... also jetzt funktioniert alles einwandfrei ohne das Fehler auftauchen :)  ;D
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 18, 2015, 17:24:22
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?
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 19, 2015, 09:24:01
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
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 19, 2015, 10:35:22
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...
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juni 19, 2015, 12:59:26
Hi MaggieMay,

genau du hast recht, es war doch die Zwischentabelle.Zwischentabelle_ID.

-> Bei Änderung dann me.cmbVersion.Requery ? 

Hast du noch einen Tipp für mich, wie ich das mit den PDFs mache? Suche schon den ganzen Tag, jedoch finde ich nichts passendes.

Vielen Dank nochmal

LG

yaya   
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juni 19, 2015, 13:08:18
Zitat von: yaya3 am Juni 18, 2015, 15:33:32
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.
Hast du es schonmal mit der FollowHyperlink-Methode probiert?
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juli 14, 2015, 10:13:40
Hi MaggieMay,

war lange Zeit nicht mehr aktiv. Das mit dem FollowHyperlink hat leider nicht funktioniert, weil Access die Spalte in der sich der Hyperlink befindet, nicht als einzelnes Element sieht sondern versucht die komplette Zeile zu öffnen.

Ich habe viel recherchiert, leider ohne Erfolg.

LG YAYA  :-[
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juli 14, 2015, 11:48:59
Hi,

wenn das Feld vom Typ Hyperlink ist, sollte doch eigentlich ein Klick genügen, um die Datei zu öffnen. Wenn nicht, warum dann überhaupt ein Hyperlink und nicht einfach Text? Dann gäbe es jedenfalls kein Problem mit der FollowHyperlink-Methode.

Für weitere Lösungsvorschläge werden mehr Details benötigt. Und erkläre mal, was genau du hiermit meinst:
Zitatweil Access die Spalte in der sich der Hyperlink befindet, nicht als einzelnes Element sieht sondern versucht die komplette Zeile zu öffnen.
Arbeitest du direkt auf der Tabelle oder was meinst du hier mit Spalten und Zeilen?
Beschreibe bitte wie du da vorgehst.
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juli 15, 2015, 09:38:04
Guten Morgen,

genau ich arbeite direkt aus dem Listenfeld. In einem Listenfeld befinden sich mehrere PDF Dateien die untereinander gelistet sind. Wenn ich auf eine PDF Datei klicke, dann markiert Access die ganze Zeile und versucht (so glaube ich es ), die ganze Zeile zu öffnen. Also er nimmt das Feld, in dem der Link ist, nicht Wahr.

Ich hoffe ich konnte diesen Fall dir näher bringen.

LG

YAYA
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juli 15, 2015, 13:31:35
Hi,

ein Hyperlink in einem Listenfeld kann nicht funktionieren, also musst du die Datei im Klick- oder Doppelklick-Ereignis per VBA öffnen.

Was liefert denn die entsprechende Spalte des Listenfeldes? Zeig doch mal ein Beispiel dazu.
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: yaya3 am Juli 15, 2015, 16:59:36
HI,

hat funktioniert.

Private Sub list_admin_DblClick(Cancel As Integer)
Application.FollowHyperlink (Me.ActiveControl.Hyperlink.Address)

hatte im Format "gebunde Spalte" eine falsche Zahl. Nun geht es.

Vielen Dank MaggieMay !

Gruß

YAYA
Titel: Re: Listenfeld abhängig von Kombinationsfeld
Beitrag von: MaggieMay am Juli 15, 2015, 17:05:22
Zitathatte im Format "gebunde Spalte" eine falsche Zahl.
Du kannst über die Column-Eigenschaft auf jede Spalte des Listenfeldes zugreifen:
Application.FollowHyperlink Me.ActiveControl.Column(x).Hyperlink.Address