Hallo zusammen.
(Vorweg: Ich bin kein Access-Profi :(- auch wenn das bei meinem Benutzerprofil steht - weiß nicht, wie man das ändert. ::) )
Ich habe eine Access-DB, die u.a. aus den Tabellen Artikel, Lagerbewegungen sowie 2 Abfragen besteht, über die ich zum einen den Artikelverbrauch sowie den damit verbundenen Warenwert seit Beginn der Aufzeichnungen sowie andererseits den exakten Netto-EK jedes Artikels (gleitender Durchschnitt) berechnen lasse. Nun möchte ich gerne eine Formular erstellen, das aus einem Kombifeld besteht, über das der Artikel ausgewählt werden kann, 2 Textfelder (Zeitraumvon, Zeitraumbis) im Datumsformat und eine Schaltfläche "Verbrauch berechnen". Über die Auswahl des Artikels und die Eingabe der beiden Datumswerte soll nach Betätigen der Schaltfläche in einem weiteren Textfeld die verbrauchte Menge des Artikels und in einem anderen, weiteren Textfeld der entsprechende Warenwert angezeigt werden. Wie schon erkennbar, ist eigentlich alles an Berechnungen vorhanden (außer die Berechnung des Verbrauchs für einen gewissen, ausgewählten Zeitraum). Ich weiß nur aktuell nicht, wie ich eine Funktion aufbauen kann, die mir die Ergebnisse im Formular anzeigt.
Hallo,
einfachste Möglichkeit ist die Verwendung der DSUM()-Aggregatsfunktion (siehe VBA-Hilfe). Im Where-Condition-Teil können die einschränkenden Kriterien (aus den Textfeldern) mitgegeben werden.
Alternativ können in einer Public(!)-Funktion mit Hilfe eines Recordsets und einer passenden Abfrage die Werte berechnet und in den entspr. Textfeldern angezeigt werden. Der Aufruf der Funktion kann im Steuerelementinhalt mit Übergabe der Kriterien erfolgen, z. B:
=fktArtikelVerbrauch([Zeitraumvon];[ZeitrumBis];[ArtikelNr])
Hallo DF6GL.
Vielen Dank zunächst für Deine Hilfe.
Ich habe noch einen Syntaxfehler im Code, den ich als Ereignis bei Fokuserhalt für das Textfeld hinterlegt habe, in dem der zugehörige Verbrauch des Artikels angezeigt werden soll.
DSum("Bewegung";"Lagerbewegungen";[Datum] Between [txtvon] And [txtbis])
Kann man auf Anhieb sehen, was ich dort falsch mache?
Viele Grüße
Hallo,
in SQL-Where-Conditions muss das Datum im USA- oder ISO-Format formatiert sein. Alternativ könnte man auch Zahlen-Konvertierungen benutzen..
Außerdem ist "Datum" als Feldname wegen des reservierten Wortes zu vermeiden.
Zitat=DSum("Bewegung";"Lagerbewegungen";"[Datum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") & " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
=DSum("Bewegung";"Lagerbewegungen";[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") & " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
Das Feld "Datum" heißt nun "Buchungsdatum".
Allerdings wird noch ein Syntaxfehler "angemeckert".
Hi,
es fehlt ein Gänsefuß:
=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") & " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
ZitatHi,
es fehlt ein Gänsefuß:
=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") & " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
Vielen Dank.
Leider bleibt der Syntax-Fehler erhalten. :-\
Die Syntax ist für die deutsche Spracheinstellung so korrekt. Statt zu zitieren, was man 10 cm oberhalb Deines Beitrags nachlesen kann (wir sind noch nicht so senil), solltest Du besser Deinen verwendeten Ausdruck - vorzugsweise als Code formatiert (Knopf mit Raute (#) verwenden) - zeigen.
Hallo,
wobei es (mir) nicht so ganz klar ist, WO der Ausdruck nun steht:
Zitat..den ich als Ereignis bei Fokuserhalt für das Textfeld hinterlegt habe
In der Eigenschaft selber oder in der dazugehörenden Ereignisprozedur....
In der FokusErhalt-Eigenschaft selber hat das keinen Sinn und eine Ereignisprozedur verlangt englische Sprache. Der Ausdruck muss in der Eigenschaft "Steuerelementinhalt" des Anzeige-Textfeldes stehen.
Der Ausdruck
=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") & " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
steht nun in der Eigenschaft "Steuerelementinhalt" des Anzeige-Textfeldes.
Allerdings bekomme ich noch die Anzeige #Fehler
Was mich verwirrt: Access macht aus DSUM automatisch DOMSUMME - also quasi die deutsche Übersetzung. Begriffe wie "BETWEEN" oder "AND" bleiben aber in englischer Sprache stehen.
Hallo,
ja, Access übersetzt das ins Deutsche....spielt aber keine Rolle.
Und besser wäre es, den Steuerelementinhalt mit C&P zu zeigen...
Aber noch ein Versuch:
=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format(nz([txtvon];0);"\#yyyy-mm-dd\#") & " And " & Format(nz([txtbis];0);"\#yyyy-mm-dd\#") )
und weiterhin (nochmal) prüfen, ob die Namen stimmen....
Hallo. Funktioniert leider noch nicht. Trotzdem vielen Dank. Ich werde es weiter versuchen. ;)
Du könntest ja auch ein Minimalbeispiel im 2003er-Format mit wenigen Spieldaten in der Tabelle und dem besagten Formular hochladen.
@Lachtaube
Da könnt ihr wahrscheinlich nichts mit anfangen, da es sich um ein Access-Projekt handelt. Daten liegen also auf dem SQL.
Habe bisher auch noch nicht die zündende Idee gehabt, wie ich die Berechnung hinbekomme. Ich vermute, dass ich eine Funktion aufbauen muss, denn ich möchte z.B. auch noch verhindern, dass im Datumsfeld (txtbis) ein älteres Datum eingegeben werden kann als im Datumsfeld (txtvon). Das bekomme ich sicherlich nicht in die Eigenschaft "Steuerelementinhalt" des Textfeldes hinein.
Viele Grüße
Karsten