Hallo Forumgemeinde,
ich habe eine Frage, für die Spezies unter euch sicher ganz simpel.
In einer Tabelle werden Vorgänge angelegt mit einer Vorgangs-ID, Benutzer-ID und Datum.
Damit verknüpft ist eine Tabelle, in der zu jedem Vorgang einzelne Positionen erfaßt werden, z.B. Materialnummer, Menge, Einheit, Artikelname. Natürlich kann es zu jedem Vorgang mehrere Positionen geben.
Jetzt möchte ich ein Formular erstellen, auf dem eine Art Journal-Funktion ist, d.h. ein Listenfeld mit allen Vorgängen, und wenn ich da einen Vorgang auswähle, sollen in einem zweiten Listenfeld die einzelnen Positionen zum Vorgang angezeigt werden.
Leider kriege ich die Abfrage dazu nicht hin.
Ich hoffe, daß ihr mir da weiterhelfen könnt.
Vielen Dank im Voraus. fabishop
Hallo,
Das Listenfeld mit den Vorgängen kannst du direkt an die Tabelle binden; -
Datenherkunft der Liste -> tblVorgaenge. Die VorgangsID kommt dabei
vorzugsweise in die erste Spalte, die auch die gebundene wird.
Die Tabelle "tblPositionen" benötigt ein Fremdschlüssel-Feld mit der VorgangsID.
Datenherkunft der Liste mit den Positionen (lstPositionen):
SELECT AlleFelderDieDuSehenWillstMitKommaGetrennt
FROM tblPositionen
WHERE FKVorgangID = Me!lstVorgaenge
Das Ereignis "Beim Klicken" der Vorgangs-Liste wird dann noch so behandelt:
(Ereignisprozedur)
Private Sub lstVorgaenge_Click()
Me!lstPositionen.Requery
End Sub
hth
gruss ekkehard
Hey ekkehard,
danke erstmal für die schnelle Hilfe.
Soweit verstehe ich das auch, bis auf die "FK"-Sache.
Das sagt mir irgendwie garnichts und gibt einen Syntaxfehler aus:
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'FK[Vorgang_ID]=Me!lst_vorgang'
Aktuell habe ich es so:
SELECT [Posten_ID],[Vorgang_ID],[Materialnummer],[Menge],[Preis] FROM tbl_Bonposten WHERE FK[Vorgang_ID]=Me!lst_vorgang
Das funktioniert aber so nicht.
Als Bild habe ich mal die Tabellenbeziehungen angehängt.
Danke.
Me!lstVorgaenge kann in einer Abfrage nicht aufgelöst werden. Statt dessen kann jedoch ein Formular-Parameter verwendet werden: [Form]![Listenfeldsteuerelementname] oder in Langform: [Forms]![Formularname]![Listenfeldsteuerelementname]
Das Ereignis Beim Klicken ist eher auch kontraproduktiv - hier bietet sich Nach Aktualisierung an.
Hallo,
ZitatJetzt möchte ich ein Formular erstellen, auf dem eine Art Journal-Funktion ist, d.h. ein Listenfeld mit allen Vorgängen, und wenn ich da einen Vorgang auswähle, sollen in einem zweiten Listenfeld die einzelnen Positionen zum Vorgang angezeigt werden.
Warum benutzt Du für eine solche klassische 1:n-Tabellenbeziehung nicht die (klassische) Haupt-Unterformular-Grundkonstruktion, um die Daten anzuzeigen und auch gleich editierbar zu machen?
Das Suchen (Selektieren, Filtern, Positionieren) kann dann einfach nachträglich über ungebundene Kombi- und/oder Listenfelder passieren.
Zur Fehlersituation:
In der Eigenschaft "´Datensatzherkunft" des 1. Listenfeldes ("lstVorgaenge") sollte dieses stehen:
Select [Vorgangs-ID] ,[Datum] from tblVorgaenge order by [Datum] descDabei muss die Eigenschaft "Mehrfachauswahl" auf "keine" stehen.
In der Eigenschaft "Datensatzherkunft" des 2. Listenfeldes ("lstPositionen") sollte etwa dieses stehen:
SELECT * FROM tblPositionen WHERE FKVorgangID = [lstVorgaenge]
möglich auch:
SELECT * FROM tblPositionen WHERE FKVorgangID = []![lstVorgaenge]
' das "*" kann (wie angedeutet) durch eine kommagetrennte Liste der anzuzeigenden Felder ersetzt werden, wobei die sonstigen Eigenschaften des Listenfeldes daran angepasst werden müssen.
Alternativ kann gleich in der Klick-Prozedur die SQL-String Zuweisung an die Datensatzherkunft erfolgen:
Private Sub lstVorgaenge_Click()
Me!lstPositionen.Rowsource = "SELECT * FROM tblPositionen WHERE FKVorgangID = " & Me![lstVorgaenge].Column(0)
End Sub
Wie schon zuvor gesagt, ist das Beim Klicken-Ereignis suboptimal. Wenn 10x nacheinander auf die selbe Zeile geklickt wird, wird auch 10x nacheinander das Beim Klicken-Ereignis ausgelöst. Bei einem Schaltknopf wäre dieses Verhalten durchaus wünschenswert. Das Ereignis Nach Aktualisierung findet hingegen nur dann statt, wenn eine andere Zeile als die aktuelle des Listen-/Kombifelds ausgewählt wird - nach dem Motto: soviel Datenverkehr wie nötig und nicht soviel wie möglich. :)
Vielen Dank, so hat es geklappt. :)
Hallo,
@Lachtaube
Mit dem Formularbezug hast du natürlich recht. Ich hatte da wohl die
Zuweisung der RowSource per VBA im Hinterkopf; - und selbst da wäre
die geschriebene Zeile noch falsch gewesen :(
Bezüglich Ereignis gebe ich dir auch recht.
@fabishop
FKVorgangID soll das angesprochene Fremdschlüssel-Feld (FK = ForeignKey)
in der Positionstabelle sein, - der von dir gewählte Name ist mir ja nicht bekannt.
Ansonsten schliesse ich mich Franz' Ausführungen bezügl. HFo/UFo an.
gruss ekkehard