Juni 21, 2021, 03:04:37

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Tabelle Artikel und Preis verbinden und Combo-Box nach Gültigkeitsdatum filtern

Begonnen von Marius1994, Mai 12, 2021, 23:18:15

⏪ vorheriges - nächstes ⏩

Marius1994

Guten Abend,

nach sehr langer Recherche, die leider erfolglos war, melde ich mich hier zu Wort.

Ich hatte Access mal in einer Weiterbildung. Musste aber feststellen, dass ich schon sehr viel wieder vergessen habe, da diese auch schon etwas her ist.

Mein Problem ist folgendes:

Ich habe ein Accessprogramm erstellt, in dem ich Bestellungen erstellen kann. Das hat auch wunderbar funktioniert, bis ich die Preispflege eingearbeitet habe. Nun habe ich schon in verschiedenen Foren recherchiert und habe eine Tabelle Names tblPreis angelegt. Hier bin ich mir aber schon unsicher, ob ich die Beziehung zwischen Tabelle tblArtikel und tblPreis richtig gesetzt habe.(siehe anbei)

Da ein Artikel mehrere Preise haben kann, habe ich in der Tabelle tblPreis ein Feld mit "Gültig ab" angelegt.

Ich habe ein Formular mit Ufo erstellt. Hier soll über eine Combobox nur der Artikel angezeigt werden, der dem aktuellerem Datum entspricht. Und noch voher nach Warengruppe gefilter wird.

Ich habe es auch hinbekommen, über das Gruppieren der Artikelbezeichnung und mit Max(tblPreis.[Gültig ab]) die richtigen Artikel anzuzeigen. Sobald ich aber die ArtikelNr hinzunehmen und diese fortlaufend ist, wird diese nicht gruppiert und mir werden wieder alle Daten angezeigt.

Ich komme einfach nicht weiter und bin mir auch nicht sicher ob ich vielleicht ein grundlegndes Problem habe.

Ich hoffe Ihr könnt mir helfen...

https://www.directupload.net/file/d/6181/q8hyefr7_png.htm[/img]

https://www.directupload.net/file/d/6181/3ofegluo_png.htm[/img]

https://www.directupload.net/file/d/6181/gcg5oy2o_png.htm[/img]

LG Marius

DF6GL

Hallo,


mehrere Anmerkungen:


--Vermeide Sonder- und Leerzeichen in Feld- und Objektnamen.

-- Benenne Feldnamen db-weit eindeutig, indem die Abkürzung des Tab-Namens als Prefix benutzt wird und/oder bei Fremdschlüsselfeldern "_f" angehängt wird  (z. B.  "ArtikelNr_f" oder "BP_ArtikelNr"  in tblPositionen)


-- Benenne n-Tabellen sinngemäß, soll heißen tblPositionen   ---> tblBestellPositionen.

-- Wenn die ArtikelNr aus Buchstaben und Ziffern bestehen kann (alfanumerisch ist),  dann sollte ein solches Feld  nicht als Primärschlüsselfeld dienen. Setze ein Autowert_Feld als PK ein. (Gilt für alle Tabellen.)



--Die Funktion   "Max(tblPreis.[Gültig ab])"   ist nicht zielführend.  Was kommt heraus, wenn [Gültig ab] in der Zukunft liegt?

--Es fehlt mindestens eine Tabelle, bzw. tblPreise muss geändert werden, damit die Preise auch den Artikeln zugeordnet werden können. 


--> tblArtikelPreise
APID  (Autowert)
AP_ArtikelNr_f  (Zahl)
AP_Preis (Währung)
AP_GültigAb (Datum/Uhrzeit)

Der aktuell gültige Preis für Artikel A4711c kann mit z. B.
Select Top 1 AP_Preis from tblArtikelpreise Where AP_GültigAb <= Date() And AP_ArtikelNr_f = "A4711c"  Order by AP_GültigAb desc(SQL und wenn ArtikelNr  alfanumerisch ist)

ermittelt werden.


Für das  frmPositionenUnterformular braucht es keine gruppierende Abfrage und auch keine Verknüpfungen zu anderen Tabellen.  Die Filterung (Positionen zur Bestellung)  erfolgt über die UFO-Steuerelementeigenschaften "Verknüpfen von/nach".



Prinzipiell reicht die Angabe des Tabellennamens (tblPositionen) in der Datenherkunft des Forms völlig aus.
Sollte es sich herausstellen, dass eine Abfrage (z. B. wegen Vorsortierungen) benötigt wird, ist diese leicht einzusetzen.


So, genug für jetzt  ;)


PS:  benutze die Upload-Funktion (Attachments)  des Forums, um Bilder hochzuladen.

Marius1994

Guten Morgen,

vielen Dank für die schnelle Antwort! Ich werde die Punkte heute Abend umsetzen und mich wieder melden!

:)

LG Marius

PhilS

Wenn du mit Englisch zurechtkommst, kannst du dir mal meine zwei Videos zu zeitabhängigen Daten anschauen. Das zweite passt eher zu deinem bisherigen Ansatz.

Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Marius1994

Hallo zusammen,

ich habe nun meine Tabelle tblArtikelPreise angepasst. Außerdem habe ich mich an dem Video Time Based Data - Normalized orientiert und habe es auch hinbekommen, dass ich über eine Abfrage, die ich in meiner Combobox hinterlegt habe, die richtigen Artikel mit dem gültigem Preis angezigt bekomme!

Jetzt sehe ich meinen Artikel mit dem richtigem Preis aber wie kann ich den Preis fest hinterlegen.

Sobald ich den Artikel anklicke, erscheint mir noch der alte Preis, was auch logisch ist, da ich in meiner Tabelle tblArtikel.Preis noch die selbe Preis_ID hinterlegt habe.

Ich stehe hier leider auf dem Schlauch...

LG Marius

PhilS

Zitat von: Marius1994 am Mai 15, 2021, 16:44:54Jetzt sehe ich meinen Artikel mit dem richtigem Preis aber wie kann ich den Preis fest hinterlegen.

Sobald ich den Artikel anklicke, erscheint mir noch der alte Preis, was auch logisch ist, da ich in meiner Tabelle tblArtikel.Preis noch die selbe Preis_ID hinterlegt habe.
Eine "Preis_Id" ist weitestgehend irrelevant. (D.h. bestenfalls für die interne Verwaltung der Preise relevant, aber nicht in Bezug auf Artikel.)
Der Zusammenhang zwischen Artikeln und Preisen wird über die tblPreis.ArtikelId und tblPreis.GültigAb hergestellt. Das Feld tblArtikel.Preis entfällt.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Marius1994

Sobald ich den Primärschlüssel an das Feld tblPreis.ArtikelNr und tblPreis.GültigAb vergebe, lassen sich in meinem Unterformular keine Daten mehr auswählen.

Woran liegt das?

PhilS

Zitat von: Marius1994 am Mai 15, 2021, 17:37:39Sobald ich den Primärschlüssel an das Feld tblPreis.ArtikelNr und tblPreis.GültigAb vergebe, lassen sich in meinem Unterformular keine Daten mehr auswählen.
Was genau heißt das "lassen sich in meinem Unterformular keine Daten mehr auswählen."?
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!


PhilS

Zitat von: Marius1994 am Mai 15, 2021, 17:59:41In meinem Unterformular frmPositionen gibt es keine Möglichkeit mehr Daten einzugeben.
Hast du Kriterien in der Abfrage, um die Ergebnisse auf genau einen Preis einzuschränken?
Es kann trotzdem sein, dass Access hier meint es gäbe keine eindeutigen Daten. Das wäre ein Grund dafür, dass die Abfrage nicht aktualisierbar ist. Eine mögliche, wenn auch nicht schöne, Lösung wäre dann, den Preis über die DLookup-Funktion zu ermitteln und nicht über einen Join auf die Preis-Tabelle.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Marius1994

Ich bin langsam echt am verzweifeln..

Meine Abfrage beinhaltet folgenden Code:

SELECT tblArtikel.ArtikelNr, tblArtikel.Artikelbezeichnung, tblPreis.Preis, tblPreis.GültigAb, tblWarengruppe.WarengruppenNr
FROM tblWarengruppe INNER JOIN (tblArtikel INNER JOIN tblPreis ON tblArtikel.ArtikelNr = tblPreis.ArtikelNr_f) ON tblWarengruppe.WarengruppenNr = tblArtikel.WarengruppenNr
WHERE (((tblPreis.GültigAb)<=Date()) AND ((tblWarengruppe.WarengruppenNr)=[Formulare]![Formblatt Bestellungen]![cbo_Warengruppe]) AND ((Exists (Select 'x'
FROM tblPreis p2
WHERE p2.ArtikelNr_f = tblPreis.ArtikelNr_f
AND p2.GültigAb <= Date()
AND p2.GültigAb >tblPreis.GültigAb))=False));

ebs17

Zwei JOIN's in der Abfrage und der Glaube, das soll aktualisierbar sein? Eine Abfrage ist keine Exceltabelle.

Für mich ist es gute Praxis, Aktualisierungen immer auf nur genau eine Tabelle auszuführen, sowohl in einem Formular als auch bei Aktionsabfragen/Recordsets.
Mit freundlichem Glück Auf!

Eberhard

Marius1994

Ich habe mir den richtigen Preis nun mit der DLookup-Funktion geholt. Das funktioniert auch soweit.
Nun stehe ich aber schon vor dem nächsten Problem.

Ich habe jetzt zu einem Artikel mehrere Preise. Ich habe mein Bericht voher auf die von mir eingetragenen Datensätze begrenzt. Der Code:

Private Sub Befehl22_Click()
DoCmd.OpenReport "Bestellungen_3", acViewPreview, , _
                    "[BestellNr] = " & Me!BestellNr _

Sobald ich jetzt mehrere Preise eingetragen habe, zeigt mir mein Bericht auch soviele Datensätze an. Auch wenn ich nur ein Datensatz eingetragen habe.

Ich denke ich muss den Code erweitern und noch eine zusätliche Bedingung einbauen...

Ich hoffe es war eingermaßen verständlich erklärt...

Vielen Dank schonmal im Voraus!!