Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage aus 2 Tabellen

Begonnen von fabishop, Juli 04, 2016, 22:00:12

⏪ vorheriges - nächstes ⏩

fabishop

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

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

fabishop

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.

Lachtaube

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.
Grüße von der (⌒▽⌒)

DF6GL

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] desc

Dabei 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





Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Lachtaube

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. :)
Grüße von der (⌒▽⌒)

fabishop

Vielen Dank, so hat es geklappt.  :)

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)