PDA

Vollständige Version anzeigen : Abhängigkeiten von Kombi- / Listenfeldern und UFo's


J_Eilers
20.11.2003, 23:17
Mit diesem Beispiel soll veranschaulicht werden, wie man eine Abhängigkeit von Kombinations- / Listenfeldern und Unterformularen herstellen kann.

Das angehängte Beispiel wurde in Access 2000 erstellt, funktioniert aber auch in Access 97 (ist konvertiert). Verwendet wurde die deutsche Version.

Eine Voraussetzung ist eine Datengrundlage ähnlich meines Aufbaus.

Im ersten Kombinationsfeld wählt man eine Gruppe aus. Nach der Aktualisierung passieren nun 2 Ereignisse.

Listenfeld Geräte II:
Me!lstGeraetII.RowSource = "SELECT tblGeraet.GeraeteID, tblGeraet.Geraet " & _
"FROM tblGeraet WHERE tblGeraet.GruppenID = " & Me!cmbGruppe

Mit der RowSource-Methode wird die Datenherkunft des Listenfeldes beeinflusst. Der SELECT- und FROM-Teil beschreibt, welche Daten woher bezogen werden. Der WHERE-Teil gibt ein Kriterium an. Da die gebundene Spalte des Kombinationsfeldes die ID-Spalte ist, reicht hier ein einfacher Verweis.

Sollte das ID-Feld wider Erwarten (im Tabellenentwurf) ein nicht numerisches Feld sein, bzw. man will eine andere Spalte als die gebundene Spalte des Kombinationsfeldes auswerten, muss man das Kriterium in Hochkommata respektive die Column-Eigenschaft verwenden:
'wenn GruppenID (s. Tabellenentwurf!) nicht numerisch ist:
"WHERE tblGeraet.GruppenID = '" & Me!cmbGruppe & "'"

'wenn eine nicht gebundene Spalte verwendet werden soll,
'und GruppeID (s. Tabellenentwurf!) numerisch ist:
"WHERE tblGeraet.GruppenID = " & Me!cmbGruppe.Column(x)

'wenn eine nicht gebundene Spalte verwendet werden soll,
'und GruppenID (s. Tabellenentwurf!) nicht numerisch ist:
"WHERE tblGeraet.GruppenID = '" & Me!cmbGruppe.Column(x) & "'"
Bei der Column-Funktion kann man gezielt auf einzelne Spalten des Listenfeldes zugreifen. Wobei mit 0 angefangen wird zu zählen, d.h. Column(1) verweist somit auf die 2. Spalte.

Listenfeld I:
In diesem Fall habe ich den Verweis in der Datenherkunft des Listenfeldes selbst gemacht. Hierzu geht man auf die Eigenschaften und auf die Datenherkunft. Nun klickt man auf die "..." und gelangt in die SQL-Ansicht.
Hier geht man in die entsprechende Spalte oder, falls nicht vorhanden, muss diese noch eingefügt werden. Nun geht man auf den "Zauberstab" und dort auf: Formulare / geladene Formulare und das entsprechende Feld. Die SQL-Anweisung sieht nun so aus:
SELECT tblGeraet.GeraeteID, tblGeraet.Geraet
FROM tblGeraet
WHERE (((tblGeraet.GruppenID)=[Formulare]![frm]![cmbGruppe]));
Also ganz ähnlich dem obigen. In der normalen Ansicht steht dort jetzt ein Eintrag wie:
[Formulare]![frm]![cmbGruppe]

Um das ganze jetzt immer zu aktualisieren benötigt man noch ein Requery. Dieses wird ebenfalls als Ereignis nach Aktualisierung geschrieben:
Me!lstGeraetI.Requery

Unterformular:
In dem Unterformular ist dieselbe Methode verwendet worden, wie bei dem Listenfeld Geräte I. Einfach nur, weil es schneller ging. Es sind auch hier beide Möglichkeiten umsetzbar. Allerdings muss man hierbei die RecordSource-Methode verwenden.
Der Requery gestaltet sich hier ebenfalls anders:
Forms!frm!ufrm.Requery

So, ich hoffe es ist verständlich und man kann etwas damit anfangen...



AD: Auf Jans Wunsch hin nach Ablauf der normalen Bearbeitungsfrist noch einmal überarbeitet.

J_Eilers
12.01.2004, 14:11
Hi zusammen,

nachdem sich dieses Beispiel schon mehr als 400 Leute angesehen haben und auch ein paar es runtergeladen haben, habe ich einen Verbesserungsvorschlag für dieses Beispiel. Und zwar bin ich am Überlegen, es noch um leere Felder zu erweitern. Sprich Wenn kein Eintrag im Listenfeld ausgewählt wird, zeige alle. Für das lstGeräte II würde ich ebenfalls alle anzeigen lassen, wenn im Kombi nichts ausgewählt wurde. Also etwas dynamischer, da öfter mal die Fragen im Forum kommen...Interesse? Andere Vorschläge? Etwas was ich noch besser machen kann?

Vielleicht schaut ihr ja auch mal in diesen Thread (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=114449) ;)

heini
12.01.2004, 14:47
Also ich für meinen Teil hab schon Interesse.

Tu Dir keinen Zwang an :D