Gute Tag,
ich bin neu hier, und weiß noch nicht einmal, wie man eine Mitteilung schreibt, die Alle lesen können.
Ich habe folgendes Problem mit einer Abfrage aus der Tabelle "Artikel":
Die Tabelle hat folgenden Aufbau:
ArtID ArtName Datum Bestandsänderung
1 Artikel5 02.05.2016 +5
2 Artikel8 05.05.2016 +12
3 Artikel5 12.05.2016 - 2
4 Artikel8 18.05.2016 +3
Ich möchte folgende Abfrage kreieren:
ArtID ArtName Datum Bestandsänderung LfdSaldo
1 Artikel5 02.05.2016 +5 5
2 Artikel8 05.05.2016 +12 12
3 Artikel5 12.05.2016 - 2 3
4 Artikel8 18.05.2016 +3 15
Ich bin für jede Hilfe dankbar bezüglich der Spalte "LfdSaldo" dankbar.
Bin Access 2010 Anfänger und verstehe nichts von VBA.
MfG
Jürgen
Hallo,
willst Du wirklich einen laufenden Saldo ?
Oder eher den aktuellen Bestand ?
Ein laufender Saldo macht für mich bei einem Bestand eher keinen Sinn.
Hallo,
ja, ich möchte definitiv den laufenden Saldo, weil in diesem Fall die Lagerkosten pro Tag auf die jeweiligen Artikelmengen berechnet werden sollen.
Gruß
Jürgen
Hallo Jürgen,
Zitat von: gassek am Juli 06, 2016, 18:27:58ich bin neu hier, und weiß noch nicht einmal, wie man eine Mitteilung schreibt, die Alle lesen können.
das hast du schon ganz richtig gemacht, indem du ein neues Thema eröffnet hast.
Den lfd. Saldo (bzw. die lfd. Summe) kannst du in einer Abfrage analog zur Access-FAQ 3.11 (http://www.donkarl.com/faq/FAQ3Tabfragen.htm#3.11) ermitteln.
Hallo,
Nein Maggie, - lfd.Saldo pro Artikel.
Ich denke http://www.donkarl.com?FAQ3.11 (http://www.donkarl.com?FAQ3.11) könnte weiterhelfen.
gruss ekkehard
zu spät :D
Hallo Ekkehard,
ich hatte meinen Irrtum schon selbst bemerkt und den Beitrag entsprechend korrigiert.
Hallo,
das Problem ist ja der Saldo pro Artikel und nicht über alle Datensätze. Und das müsste man noch in die FAQ 3.11 einarbeiten und da ist mir nichts eingefallen.
Hallo an Alle,
den Gesamtsaldo kriege ich.
Das Problem ist wirklich der Saldo pro Artikel...
Naja, da muss einfach nur das Kriterium entsprechend erweitert werden.
Beispiel:
Select ArtID, ArtName, Datum, Bestandsänderung,
DSUM("Bestandsänderung","Artikel","artName='" & artName & "' AND Datum <=" & Datum ) AS LfdSaldo
From Artikel
bzw. mit Datumsformatierung:
Select ArtID, ArtName, Datum, Bestandsänderung,
DSUM("Bestandsänderung","Artikel","artName='" & artName & "' AND Datum <=" & Format(Datum, "\#yyyy\/mm\/dd\#")) AS LfdSaldo
From Artikel
Hallo MaggieMay,
nachdem ich die Abfrage erstellt hatte, erhielt ich folg. Fehlermeldung für die erste Abfragenzeile und folgende Abfrage.
- Synatxfehler in Zahl in Abfrageausdruck 'artName'='Artikel1' AND Datum <=02.05.201'
ArtID ArtName Datum Bestandsänderung LfdSaldo
1 Artikel1 02.05.2016 2 #Fehler
2 Artikel2 04.05.2016 4 #Fehler
3 Artikel3 09.05.2016 4 #Fehler
4 Artikel1 06.06.2016 5 #Fehler
5 Artikel1 13.06.2016 -2 #Fehler
6 Artikel2 06.06.2016 -1 #Fehler
7 Artikel2 13.06.2016 5 #Fehler
8 Artikel3 20.06.2016 10 #Fehler
9 Artikel3 16.06.2016 2 #Fehler
Im nächten Bsp. Habe ich das Datum in einfache Hochkommas gesetzt. & '[Datum]'). Dann sah die Abfrage wie folgt aus.
Also mit Gesamtsummen pro Artikel.
ArtID ArtName Datum Bestandsänderung LfdSaldo
1 Artikel1 02.05.2016 2 5
2 Artikel2 04.05.2016 4 8
3 Artikel3 09.05.2016 4 16
4 Artikel1 06.06.2016 5 5
5 Artikel1 13.06.2016 -2 5
6 Artikel2 06.06.2016 -1 8
7 Artikel2 13.06.2016 5 8
8 Artikel3 20.06.2016 10 16
9 Artikel3 16.06.2016 2 16
So müsste die Abfrage jedoch aussehen, denn ich benötige den Bestand pro Artikel historisch.
ArtID ArtName Datum Bestandsänderung LfdSaldo
1 Artikel1 02.05.2016 2 2
2 Artikel2 04.05.2016 4 4
3 Artikel3 09.05.2016 4 4
4 Artikel1 06.06.2016 5 7
5 Artikel1 13.06.2016 -2 5
6 Artikel2 06.06.2016 -1 3
7 Artikel2 13.06.2016 5 8
8 Artikel3 20.06.2016 10 14
9 Artikel3 16.06.2016 2 16
Würde mich freuen, wenn Du mir nochmal behilflich bist.
Einen Wert vom Typ Datum darfst du nicht in Hochkommata setzen.
Die korrekte Datumsformatierung siehst du in meinem zweiten Vorschlag.
...funktioniert übrigens hervorragend! :-)
Hallo,
So funzt es:
Select
ArtID,
ArtName,
[Datum],
[Bestandsänderung],
(SELECT SUM([Bestandsänderung])
FROM Tabelle1 AS B
WHERE B.artname=A.artname AND Format(B.ArtID, "\#yyyy\/mm\/dd\#") <= Format(A.ArtID, "\#yyyy\/mm\/dd\#")) AS LfdSaldo
FROM Tabelle1 AS A
[] sind nötig wegen reserviertem Wort (Datum) bzw. Umlaut.
gruss ekkhard
Zitat[] sind nötig
Nein, nicht wirklich.
Und wie kommst du auf die Idee, die ID als Datum zu formatieren? ???
Hallo MaggieMay,
Danke für deine Antwort.
Bei deinem 2. Vorschlag bekomme ich die gleiche Fehlermeldung.
Vielleicht liegt es an der Lage der jeweiligen Hochkommata.
Ich kriegs einfach nicht hin.
Muss das Datum formatiert sein?
Hallo,
Du solltest zeigen wie genau Du es umgesetzt hast. Wie genau soll man sonst eine Fehler erkennen ?
Hallo zusammen,
So hatte ich es zuerst umgesetzt, aber ohne die Hochkommata beim Datum geht es auch nicht.
SELECT Artikel.ArtID, Artikel.ArtName, Artikel.Datum, Artikel.Bestandsänderung, DSum("Bestandsänderung","Artikel","ArtName='" & [ArtName] & "' AND Datum <=" & '[Datum]') AS LfdSaldo
FROM Artikel;
Hallo Claus,
So hatte ich es umgesetzt:
SELECT Artikel.ArtID, Artikel.ArtName, Artikel.Datum, Artikel.Bestandsänderung, DSum("Bestandsänderung","Artikel","ArtName='" & [ArtName] & "' AND Datum <=" & '[Datum]') AS LfdSaldo
FROM Artikel;
Hallo,
Zitat
Und wie kommst du auf die Idee, die ID als Datum zu formatieren?
Grrrr >:( - natürlich so:
SELECT
ArtID,
ArtName,
[Datum],
[Bestandsänderung],
(SELECT SUM([Bestandsänderung])
FROM Tabelle1 AS B
WHERE B.artname=A.artname AND Format(B.[Datum], "\#yyyy\/mm\/dd\#") <= Format(A.[Datum], "\#yyyy\/mm\/dd\#")) AS LfdSaldo
FROM Tabelle1 AS Agruss
Ach ja, und der Tabellen- und die Feldnamen stammt auch von meinem Test, - also ANPASSEN!
Hallo Ekkehard,
Danke für deine Unterstützung,
Habe ich genauso umgesetzt, und es funktioniert, nur bei den beiden letzten Positionen Artikel3 rechnet er falsch dort steht statt 14 die 16 und statt 16 die 6
Hallo,,
;D
bei einer Subquery ist keine Datums-Formatierung erforderlich:
ZitatSELECT
ArtID,
ArtName,
[Datum],
[Bestandsänderung],
(SELECT SUM([Bestandsänderung])
FROM Tabelle1 AS B
WHERE B.artname=A.artname AND B.[Datum] <= A.[Datum]) AS LfdSaldo
FROM Tabelle1 AS A
bei einer Aggregat-Funktion schon, Siehe Beitrag von MaggieMay
PS:
Zitatstatt 14 die 16 und statt 16 die 14(??)
Dann sortiere die Abfrage nach Datum aufsteigend
Hallo Franz,
ich habe dein Bsp. ebenfalls genauso übernommen und habe den gleichen Fehler bei den beiden letzten Datensätzen der Abfrage.
Warum ausgerechnet ein Fehler bei den letzten beiden?
Hallo Franz,
Zitatbei einer Subquery ist keine Datums-Formatierung erforderlich:
Stimmt, ich dachte ich hätte das probiert weil ich es auch schon
vermutet hatte, und es hätte nicht geklappt, wer weiss ...
ZitatDann sortiere die Abfrage nach Datum aufsteigend
Wollte ich ihm auch gerade schreiben,da warst du schneller.
gruss ekkehard
Hallo,
Zitatich habe dein Bsp. ebenfalls genauso übernommen
Da ist aber die Sortierung noch nicht drin:
SELECT
ArtID,
ArtName,
[Datum],
[Bestandsänderung],
(SELECT SUM([Bestandsänderung])
FROM Artikel AS B
WHERE B.artname=A.artname AND B.[Datum] <= A.[Datum])
AS LfdSaldo
FROM Artikel AS A
ORDER BY A.[Datum]) Oder muss B sortiert werden, Franz?
Neee, natürlich nicht.
gruss ekkehard
Hallo zusammen,
ich danke euch allen ganz recht herzlich.
Ich habe viel in diesen 2 Tagen im Forum gelernt.
Wenn ich darf, komme ich mit meinem nächsten Problem bald wieder.
Nochmals vielen Dank an Alle!!!
Ich habe in der Entwurfsansicht nach Artikel und nach Datum sortiert.
Und es funktioniert!
Hallo,
Man (ich) weiss ja nicht, wo diese Artikelnr. herkommt, aber bei der
Berechnung eines laufenden Saldos würde ich mich nur auf's Datum
verlassen.
Wenn das (die ID) ein Autowert ist, würde die Reihenfolge nicht mehr
stimmen, wenn du Daten mit einem Datum kleiner als das neueste
eingibst.
gruss ekkehard
Hallo Ekkehard,
Das Feld Artikel besteht aus frei wählbarem Text, hat nicht mit dem Autowert ID zu tun.
Ist das dann noch so i.O.?
Hallo,
Das ist ja noch schlimmer, also darauf würde ich mich gar nicht
verlassen. Wozu auch, Datum (schlechter Name übrigens) reicht
doch, und ist verlässlich. Mit Zeit sogar mehrmals am Tag aktuell.
gruss ekkehard
Hallo,
ich habe mich Mal wieder verdrückt ausgekehrt ;).
Mit den Feldnamen habe ich mich dem Forum angepasst.
Also die Felder heißen in meiner Tabelle wie folgt: Art_ID (AutoWert), Art_Name, Art_Datum, Art_Bestansänderung.
Jeder Artikel darf auch pro Tag nur einen (Neu)Bestand haben, weil dieser Tagesbestand in Rechnung gestellt werden soll.
Kann ich jetzt trotzdem nach Art_Name und anschließend nach Art_Datum sortieren?
Hallo,
ZitatDatum (schlechter Name übrigens)
nur nebenbei, Datum ist kein reserviertes Wort und kann problemlos verwendet werden. Ob mit oder ohne [] Klammerpaar.
Ich hatte mit Datum noch nie Probleme, die deutsche Funktion Datum() verwendet ja das Klammerpaar.
Hallo,
ZitatDatum (schlechter Name übrigens)
unterschreibe ich 8)
Zitat
Datum ist kein reserviertes Wort
unterschreibe ich auch 8)
Trotzdem ist es schlechter/miserabler Stil, ein Feld so zu nennen. Man stelle sich vor, Datum ist als Geburts-Datum gedacht, und es wird als Sterbe-Datum interpretiert.. :P
ZitatJeder Artikel darf auch pro Tag nur einen (Neu)Bestand haben
??
Wenn es nur eine Bestandsänderung für einen bestimmten Artikel an einem bestimmten Tag geben darf, dann setz einen zusammengesetzten eindeutigen Index über die ArtikelID (Artikelname) und das Datumsfeld.
Hallo,
ZitatMan stelle sich vor, Datum ist als Geburts-Datum gedacht, und es wird als Sterbe-Datum interpretiert.. :P
unterschreibe ich nicht und schlechtes Beispiel. ;D
In beiden Fällen macht ja Datum als Feldname keinen Sinn. Zumal beide Datumswerte in einer Tabelle stehen würden, was dann 2x Datum als Feldname ausschließt. Also würde man Geburtsdatum schreiben und Sterbedatum.
Hi Klaus,
ZitatIn beiden Fällen macht ja Datum als Feldname keinen Sinn.
sagte ich doch .. ;)