PDA

Vollständige Version anzeigen : Im Listenfeld bestimmte Datensätze eines Formulars anzeigen und aktualisieren (!)


RKS1
30.10.2011, 16:47
Hallo!

Ich freue mich, anhand des Forums viele Probleme zu lösen. Wirklich sehr nützlich hier! Dennoch ist bei mir ein Problem aufgetaucht, das ich nicht ohne Weiteres alleine hinbekomme.

Es geht dabei um Folgendes:
Ich gebe über ein Formular mehrere Datensätze ein. Dabei wird jedem Produkt ein Material zugeordnet (beide Felder werden über je eine Tabelle abgefragt). Beide Felder in Kombination ergeben im Übrigen auch den Primärschlussel.
Jedem Produkt kann dabei also nur ein bestimmtes Material (z.B. Leder, Rotwein, etc) zugeordnet werden, was ja auch sinnvoll ist. Aber ein Produkt besteht nun auch aus mehreren Materialien.
Also möchte ich bei der Eingabe der Materialien und verwendeten Mengen nicht die Übersicht verlieren.
Daher wollte ich wie in "Problem1.jpg" ein Listenfeld einfügen, das alle bisherigen verwendeten Materialien anzeigt. Das funktioniert ja auch! Dazu dient folgende Abfrage:

SELECT Material.Bezeichnung, Zuordnung_Kosten.Material
FROM Material INNER JOIN Zuordnung_Kosten ON Material.[ID] = Zuordnung_Kosten.[Material]
WHERE (((Zuordnung_Kosten.Produkt)=[Formulare]![Zuordnung_Kosten]![Produkt]));

Zu beachten ist hier demnach der WHERE-Teil. Also soll jeweils der Datensatz angezeigt werden, welcher durch das Feld "Produkt" bestimmt wird. Das funktioniert augenscheinlich.

Dennoch ergeben sich folgende Probleme:

Wie in Problem2.jpg zu erkennen, löscht sich das Listenfeld nicht automatisch, sobald das Feld "Produkt" leer bleibt.
Beim Hinzufügen eines Datensatzes (hier im Beispiel Noppa) aktualisiert sich das Listenfeld auch nicht (wenn ich hier beispielsweise einen neuen Datensatz "Knöpfe" des Produktes "Noppa" einfüge. (Sondern erst nach Drücken von F5).
Wähle ich im Formular ein neues Produkt aus (z.B. Noppa grande), aktualisiert sich das Listenfeld ebenfalls nicht, sondern alle Materialien aus Noppa bleiben erhalten. Das Problem ist auch nicht mit Drücken von F5 zu lösen.



Vielen Dank für alle Hilfen im Voraus! Und auch ein schönes Wochenende und ggf. erholsame Feiertage!

Grüße,
Konst

hcscherzer
30.10.2011, 17:11
Wenn in einem Kombinationsfeld mich's ausgewählt ist, hat es den Wert NULL.
Dies musst Du abfangen. Wo? Am besten in der Ereignisprozedur Produkt_AfterUpdate().
Und in der RowSource für das Listenfeld solltest Du ebenfalls NULL als (un)möglichen "Wert" für Produkt abfangen, z.B. so:SELECT Material.Bezeichnung, Zuordnung_Kosten.Material
FROM Material INNER JOIN Zuordnung_Kosten ON Material.[ID] = Zuordnung_Kosten.[Material]
WHERE (((Zuordnung_Kosten.Produkt)=Nz([Formulare]![Zuordnung_Kosten]![Produkt];0)));
Wähle ich im Formular ein neues Produkt aus (z.B. Noppa grande), aktualisiert sich das Listenfeld ebenfalls nichtDies erledigt ein Listenfeld1.Requeryin besagter Prozedur 'nach Aktualisierung', die Du sinnvollerweise auch für die zweite ComboBox anlegen solltest.

RKS1
30.10.2011, 17:31
Ok, das war wirklich extrem einfach. Das steht ja doch schon überall.

Dennoch eine weitere Frage: Wenn ich nun ein Listenfeld anklicke, wie kann ich es einrichten, dass ich gerade zu dem Datensatz im Formular springe, zudem genau das Material gehört, um bequem eventuelle Änderungen vorzunehmen?

hcscherzer
30.10.2011, 22:57
Das steht ja doch schon überallJa, wer lesen kann ...
zu dem Datensatz im Formular springe
Wenn das Listenfeld eine gebundene Spalte hat, die dem eindeutigen Identifizieren des betreffenden Satzes dient, dann steht die Lösung dafür zwar nicht 'überall', aber Du kannst es in der Listenfeld_Click() Prozedur mit der Bookmark-Eigenschaft oder der Formular.Filter Eigenschaft lösen. Und Beispiele dafür gibt es - hier im Forum - wie Sand am Meer.

Lanz Rudolf
01.11.2011, 08:08
Hallo
Und Beispiele dafür gibt es - hier im Forum - wie Sand am Meer
z.B Hier :
http://www.ms-office-forum.net/forum/showthread.php?p=1370966&highlight=Bookmark#post1370966
in #4

oder liess hier:
http://dl.dropbox.com/u/46590638/ACC/ACCESS%202000BU%20%20Begleitunterlage.pdf
ab Seite 135 .....