Formatierung laufender Saldo

Moderator: ModerationP

Formatierung laufender Saldo

Beitragvon Raubgraf » 13. Sep 2019, 19:13

Hallo allerseits,

ich habe eine kleine Irritation:


Wenn ich in meine Abfrage folgendes einfüge:
Code: Alles auswählen
Saldo: ZCurrency(DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete"))


erhalte ich eine Gesamtsumme über alles, aber keinen laufenden Saldo.

Ich habe also folgendes Beispiel gefunden und angepasst:
Code: Alles auswählen
S1: DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"datum <= #" & Format([datum];'mm-dd-yyyy') & "#")


Wenn ich das aber als Abfragefeld einfüge erscheint folgendes im Rahmen einer Autokorrektur und produziert dann als Ergebnis #Fehler:
Code: Alles auswählen
S1: DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"datum <= #" & Format([datum];'mm"-dd-yyyy"') & "#")


alles was ich eingebe wird per autokorrektur verhunzt:(
Code: Alles auswählen
S1: DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"datum <= #" & Format(Datum();"""dd"".mm.""yyyy""") & "#")


oder bringt #Fehler
Code: Alles auswählen
SALDO2: ZCurrency(DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"datum <= #" & Format([Datum];"tt.mm.jjjj") & "#"))


Hat jemand eine Idee ?
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon Beaker s.a. » 15. Sep 2019, 12:31

@Raubgraf
Was verstehst du an der Beschreibung zu DomSumme/DSum in der OH nicht?
Das für SQL benötigte Datumsformat sieht so aus:
Code: Alles auswählen
Format$(datWert, "\#yyyy\-mm\-dd\#")

gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 804
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Formatierung laufender Saldo

Beitragvon Raubgraf » 15. Sep 2019, 18:24

Ich verstehe nicht das Access das verhunzt:

Ich gebe in das Abfragefeld ein:

Code: Alles auswählen
Saldo: DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"[Buchungsdatum]<=" & Format$([Buchungsdatum];"\#yyyy\-mm\-dd\#"))


Access macht daraus:

Code: Alles auswählen
Saldo: DomSumme("Nz(Gesamtsoll)+Nz(zahlung)";"qry_vertrag_kontoauszug_miete";"[Buchungsdatum]<=" & Format$([Buchungsdatum];"""#yyyy-""mm""-dd#"""))


und bringt #fehler
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon mmarkus » 15. Sep 2019, 20:18

@Raubgraf,
du musst Deutsch schreiben, wenn du mit der Entwurfsansicht des Abfrageeditors arbeitest.

So wie der Beaker es zeigt klappt es nur direkt in der SQL Ansicht. Die kann kein Deutsch.

Abgesehen davon frage ich mich immer, warum du kein Subselect verwendest.
Da erspart du dir den ganzen Unsinn mit dem Formatieren.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1700
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Formatierung laufender Saldo

Beitragvon Beaker s.a. » 16. Sep 2019, 15:31

Na ja, ich glaube nicht, dass das ein gültiger Feldname ist
Code: Alles auswählen
"Nz(Gesamtsoll)+Nz(zahlung)"

gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 804
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Formatierung laufender Saldo

Beitragvon Raubgraf » 16. Sep 2019, 17:30

Habe sub select probiert und ein gültigen Feldnamen erzeugt. Aber die Fehlermeldung ist jetzt :UA kann nur einen DS zurückgeben

Code: Alles auswählen
SELECT H.idvertrag, H.Buchungsdatum, [gesamtsoll]+[zahlung] AS zeile, (SELECT  U.buchungsdatum FROM qry_mietkonto_union AS U )
FROM qry_mietkonto_union AS H;
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon Raubgraf » 01. Dez 2019, 20:46

Hat wirklich niemand eine Idee ? Bin langsam am Verzweifeln...es wird immer noch keine laufende Summe angezeigt sondern nur der Gesamtsaldo..

Das steht im Abfragefeld ( ich weiss auch nicht warum alle "" immer ergänzt und verdoppelt werden):
Code: Alles auswählen
Saldo: DomSumme("zeile";"qry_vertrag_kontoauszug_miete";Format([Buchungsdatum];"""yyyy-""mm""-dd""")<=Format([Buchungsdatum];"""yyyy-""mm""-dd""") & "#)")


Die Abfrage:
Code: Alles auswählen
SELECT
qry_mietkonto_union.idvertrag,
 qry_mietkonto_union.Buchungsdatum,
 qry_mietkonto_union.Verwendungszweck,
 qry_mietkonto_union.Kaltmiete,
 qry_mietkonto_union.NKVZ,
 qry_mietkonto_union.Ust,
 qry_mietkonto_union.Gesamtsoll,
 qry_mietkonto_union.Zahlung,
 Nz([gesamtsoll])+Nz([zahlung]) AS zeile,
 DSum("zeile","qry_vertrag_kontoauszug_miete",Format([Buchungsdatum],"""yyyy-""mm""-dd""")<=Format([Buchungsdatum],"""yyyy-""mm""-dd""") & "#)") AS Saldo
FROM qry_mietkonto_union
GROUP BY qry_mietkonto_union.idvertrag,
 qry_mietkonto_union.Buchungsdatum,
 qry_mietkonto_union.Verwendungszweck,
 qry_mietkonto_union.Kaltmiete,
 qry_mietkonto_union.NKVZ,
 qry_mietkonto_union.Ust,
 qry_mietkonto_union.Gesamtsoll,
 qry_mietkonto_union.Zahlung,
 Nz([gesamtsoll])+Nz([zahlung]),
 DSum("zeile","qry_vertrag_kontoauszug_miete",Format([Buchungsdatum],"""yyyy-""mm""-dd""")<=Format([Buchungsdatum],"""yyyy-""mm""-dd""") & "#)")
HAVING (((qry_mietkonto_union.idvertrag)=[Forms]![frm_vertrag]![frm_vertrag_liste]![idvertrag]))
ORDER BY qry_mietkonto_union.Buchungsdatum;
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon Gast » 02. Dez 2019, 09:41

Wenn Du es verstehen willst, lies in einer Hilfe über Domänenaggregatfunktionen und speziell über das erwartete dritte Argument nach. Die Erwartung sollte man erfüllen und nicht durch eigenkreative Gestaltung ersetzen (Plan statt Würfel).
Etwa:
Code: Alles auswählen
' bei Konstante
..., "Tabellenfeld = #21/2/2019#") ...

' bei Variablen von außen
..., "Tabellenfeld = " & Format(Variable, "\#yyyy\-mm\-dd\#")) ...
Gast
 

Re: Formatierung laufender Saldo

Beitragvon Bitsqueezer » 02. Dez 2019, 12:39

Hallo,

Du solltest für solche Dinge besser den SQL-Editor verwenden und nicht den Access-Abfragedesigner, der viel "interpretiert".

U.a. schmeißt dieser eine Bedingung auch in den HAVING-Teil, sobald ein GROUP BY enthalten ist. HAVING sollte aber nur für Ergebnisse einer Aggregatsfunktion verwendet werden, bzw. für alles, was sich aus der Ergebnisliste NACH dem GROUP BY ergibt.

Alles, was vorher schon als Bedingung ausgeschlossen werden kann, gehört natürlich in den WHERE-Teil, also vor das GROUP BY. Nur so ist auch eine Indexnutzung möglich.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7305
Registriert: 21. Jun 2007, 12:17

Re: Formatierung laufender Saldo

Beitragvon Gast » 02. Dez 2019, 13:37

Wenn man über Sinn und Effizienz der gezeigten Anweisung nachdenken möchte, könnte man sich Gedanken über folgendes machen und Schlussfolgerungen ziehen:

1) qry_mietkonto_union ... wenn die Abfrage das macht, was der Name verspricht, ist eine Indexnutzung bereits "gestorben".

2) Gruppieren ist Arbeit: Vergleich von Feldinhalten innerhalb des Tabellenfeldes, im schlechtesten Fall jeder Inhalt mit jedem Inhalt. Eine Riesen-Feldliste in der Gruppierung ist dann Vervielfachung und Riesenaufwand. Indexnutzung ist ja schon unmöglich. Gedankt wird mit Verlängerung der Laufzeit.

3) Die Ermittlung der laufenden Summe ist systembedingt in Jet ein erheblicher Aufwand. So etwas in die Gruppierung zu übernehmen und somit den Aufwand zu multiplizieren hat dann schon einen Anstrich von kindlichem Unverstand bis hin zu Perversion (bei Absicht).

4) Wie schon genannt: Filterungen VOR dem Gruppieren sind sehr sinnvoll, um die Datenmenge vor dem Gruppieren zu begrenzen.

Du solltest für solche Dinge besser den SQL-Editor verwenden und nicht den Access-Abfragedesigner, der viel "interpretiert".

Vor allem aber sollte man
- für verarbeitungsgerechte Strukturen sorgen. Eine "Notwendigkeit" von UNION ist regelmäßig problematisch.
- ein Verständnis haben für SQL und dessen Wirkungsweise und dessen Abläufe. Probierendes hilfloses Zusammenklicken im Abfrageeditor macht zwar manches möglich, aber Ergebnisse und Durchführungswege sind allein daraus begrenzt. Um vglw. mit einem Menschen zu reden, ist ja die Auswahl zwischen "gefällt mir", "gefällt mir nicht", "egal, keine Meinung" auch etwas armselig.
Gast
 

Re: Formatierung laufender Saldo

Beitragvon Raubgraf » 03. Dez 2019, 12:44

Danke für die Antworten. leider verstehe ich nicht alles...

1.
qry_mietkonto_union ... wenn die Abfrage das macht, was der Name verspricht, ist eine Indexnutzung bereits "gestorben".

Zutreffend ist das dieses Union abfrage kein indexfeld hat. Hier werden die Daten aus qry_MIete_soll und qry_miete_ist zusammengeführt.

Wie erzeuge ich denn einen solchen index in der nachstehenden Abfrage ?
Code: Alles auswählen
select * from qry_mietkonto_soll
UNION select * from qry_mietkonto_ist
ORDER BY idvertrag asc, buchungsdatum DESC;


2. Habe einen workaround gebaut (nach meinen Möglichkeiten:)
ich lasse die unionabfrage in eine tabelle mit index schreiben und greife dann auf diese zu...vermute mal Ihr amüsiert Euch sehr ...^^
Zuletzt geändert von Raubgraf am 03. Dez 2019, 13:31, insgesamt 1-mal geändert.
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon Raubgraf » 03. Dez 2019, 13:07

Bitsqueezer hat geschrieben:Christian


Danke auch dafür - habe das jetzt gekürzt : aber immer noch #Fehler -

[codeSELECT qry_mietkonto_union.idvertrag, qry_mietkonto_union.Buchungsdatum, qry_mietkonto_union.Verwendungszweck, qry_mietkonto_union.Kaltmiete, qry_mietkonto_union.NKVZ, qry_mietkonto_union.Ust, qry_mietkonto_union.Gesamtsoll, qry_mietkonto_union.Zahlung, Nz([gesamtsoll])+Nz([zahlung]) AS zeile,

DSum("Nz(Gesamtsoll)+Nz(zahlung)","qry_vertrag_kontoauszug_miete","[Buchungsdatum]<=" & Format$([Buchungsdatum],"#""yyyy-mm-dd""#")) AS Saldo

FROM qry_mietkonto_union
WHERE (((qry_mietkonto_union.idvertrag)=[Forms]![frm_vertrag]![frm_vertrag_liste]![idvertrag]))
ORDER BY qry_mietkonto_union.Buchungsdatum;
[/code]
Raubgraf
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 223
Registriert: 13. Feb 2017, 11:18

Re: Formatierung laufender Saldo

Beitragvon Gast » 03. Dez 2019, 13:27

In Jet kann man in einer Abfrage keinen Index erzeugen. Man kann ihn sich nur aus der Tabelle herrührend durch entsprechende Abfragedefinitionen versuchen zu bewahren. Ansonsten ist weg dann weg.
Ggf. müsste man das Abfrageergebnis als neue Tabelle fixieren und dort per DDL einen neuen Index setzen. Das sollte man aber auch überlegt und geplant tun.
Code: Alles auswählen
' verkürzt
qry_mietkonto_soll
UNION
qry_mietkonto_ist

Das ist dann auch keine Antwort, sondern da stellen sich weitere Fragen ...
Gast
 

Re: Formatierung laufender Saldo

Beitragvon Gast » 03. Dez 2019, 13:34

Format$([Buchungsdatum],"#""yyyy-mm-dd""#")

Ein schlichtes Kopieren in die SQL-Ansicht ist Dir nicht möglich?
Gast
 

Re: Formatierung laufender Saldo

Beitragvon Bitsqueezer » 03. Dez 2019, 13:46

Hallo,

Du kannst keinen Index auf eine Abfrage erstellen (nicht in Access). Die UNION-Abfrage "klebt" beide Ergebnisse hintereinander in eine neue Ergebnisliste und darauffolgende Abfragen verwenden daher nicht mehr einen eventuell in der Originaltabelle angelegten Index.

Deine UNION-Abfrage verwendet wiederum zwei weitere Abfragen, wo man sich fragt, ob man das nicht alles in einer erledigen kann. Wie sehen denn die SELECTs aus diesen beiden Abfragen aus?

Deine finale Abfrage verwendet nicht die richtige Formatierung, Access SQL hätte es gern als Monat-Tag-Jahr, mit Rauten umschlossen, das wäre dann:

Code: Alles auswählen
Format([Buchungsdatum],"\#mm-dd-yyyy\#")


(bitte so im SQL-Editor eingeben, nicht im Abfragedesigner)

Bei dem Ausdruck:
Code: Alles auswählen
[Forms]![frm_vertrag]![frm_vertrag_liste]![idvertrag]


Ist anzunehmen, daß "frm_vertrag_liste" der Name eines Unterformulares ist. Wenn es auch der Name des UFO-Containercontrols ist, gehört hier ein ".Form" dahinter. Also:

Code: Alles auswählen
[Forms]![frm_vertrag]![frm_vertrag_liste].Form![idvertrag]


Bei DSum verwendest Du die Nz-Funktion. Bitte dazu auch mal die Online-Hilfe lesen:
Access-Hilfe hat geschrieben:Gibt immer eine leere Zeichenfolge zurück, wenn sie in einem Abfrageausdruck verwendet wird.

und
Access-Hilfe hat geschrieben:Bei Verwendung in einem Abfrageausdruck sollte die Nz-Funktion immer das Argument ValueIfNull verwenden.


Entsprechend muß es lauten:
Code: Alles auswählen
Nz(Gesamtsoll,0)+Nz(zahlung,0)

Ansonsten gibt Nz bei NULL in einem der Felder einen Leerstring zurück, der dann nicht addiert werden kann.

Wenn Du jetzt noch einen kurzen Alias nach "qry_mietkonto_union" eingibst, dann wird Deine ganze Abfrage sehr kurz und übersichtlich:
Code: Alles auswählen
SELECT MK.idvertrag
   ,MK.Buchungsdatum
   ,MK.Verwendungszweck
   ,MK.Kaltmiete
   ,MK.NKVZ
   ,MK.Ust
   ,MK.Gesamtsoll
   ,MK.Zahlung
   ,Nz([gesamtsoll]) + Nz([zahlung]) AS zeile
   ,DSum("Nz(Gesamtsoll,0)+Nz(zahlung,0)", "qry_vertrag_kontoauszug_miete", "[Buchungsdatum]<=" & Format(MK.[Buchungsdatum], "\#mm-dd-yyyy\#")) AS Saldo
FROM qry_mietkonto_union AS MK
WHERE MK.idvertrag = [Forms]![frm_vertrag]![frm_vertrag_liste].Form![idvertrag]
ORDER BY MK.Buchungsdatum;


Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7305
Registriert: 21. Jun 2007, 12:17

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste