PDA

Vollständige Version anzeigen : statt addieren zusammenhängen


DominikSchweiz
13.06.2012, 09:35
Hallo...

...folgendes Problem:

in einer abfrage möchte ich werte zusammenaddieren (währungen) die durch andere abfragen als summen zustande kommen. zu teil behandle ich diese summen mit der nz funktion da sie auch NULL sein können.

in meiner neuen abfrage in der ich all diese summen zusammenrechnen will erscheint aber nicht die summe sondern die aufreihung der einzelnen summanden...

Beispiel:

summand 1: CHF 20.00
summand 2: CHF 40.00
summand 3: CHF 25.00

logisches resultat wenn ich summe() oder + verwende müsste CHF 85.00 sein, oder?

bei mir erscheint als resultat "CHF 20.00CHF 40.00CHF 25.00"
also eine verkettung von text.

warum ist das so?
danke für hilfe.
Dominik

Stefan Dase
13.06.2012, 09:41
Hallo Dominik,

die Werte sind keine Zahlen oder Währungsangaben, sondern enthalten eine Zeichenkette/Text. Bei Textwerten ist "+" die Konkatenation, wie auch "&".

Du solltest also sicherstellen, dass deine Inhalte als Zahl ausgegeben werden. Prüfe mal, als was die Felder eingestellt sind, aus denen die Summanden stammen. Hier muss Zahl oder Währung eingestellt sein, das Währungssymbol ist dabei unerheblich für die Rechenoperation.

Wenn es sich um Textfelder handelt kannst du diese vielleicht mittels Cast-Funktionen umwandeln. Siehe dazu CDbl und CCur in der VBA-Hilfe.

Viele Grüße,
Stefan

DominikSchweiz
13.06.2012, 18:48
...Stefan, danke für deine Hinweise.
habe alles überprüft aber geht nicht. keine ahnung warum.

per "formatwährung" alle felder definiert aber ohne erfolg.

Dominik

gpswanderer
13.06.2012, 18:56
Hallo,
wie ist denn jetzt der Datentyp des Feldes in der Tabelle. Der muss Zahl (Double) sein. Die CHF hängt man über das Feldformat im Formular an.

Ansonsten musst Du vom Feld die CHF entfernen und den Rest mit CDbl([Feldname]) in eine Zahl umwandeln. Die CHF müssen weg, sonst kannst Du nicht rechnen.

DominikSchweiz
13.06.2012, 19:11
noch eine Info dazu...

...ich habe jetzt gemerkt dass er mit allen Feldern mühe hat die ich mit der Funktion NZ() bearbeite um ein NULL-Wert zu verhindern.

wenn ich in einer Abfrage ein Feld damit behandle kann er trotz definition "formatwährung" damit nicht rechnen.

ich finde das komisch.

@gpswanderer: ich versuche deine inputs auch, danke !

dominik

gpswanderer
13.06.2012, 19:18
Hallo,
ich finde das komisch.das ist nicht komisch. Wenn das Feld in der Tabelle keine Zahl ist, kann man nicht so ohne weiteres damit rechnen. Da nutzt auch Nz() nichts. Nz wirkt sich ja nur auf Felder ohne Inhalt (Null) aus.
Daher auch die Frage wie das Feld in der Tabelel angelegt ist.
Das sollte Zahl sein, alles andere ist Krampf.
Das Währungskürzel kommt über das Format.

trotz definition "formatwährung"

Wie genau hast Du das gemacht?

Deine Erläuterungen sind nicht besonders hilfreich für Dich. :grins:

DominikSchweiz
13.06.2012, 19:27
hallo klaus,

ich habe eine alte mssql datenbank in der alle felder mit geld als "währung" deklariert sind. die kann ich nicht ändern (da laufen noch andere programme mit der selben db).

frage ich nun nach gewissen beträgen je tag kann es sein dass es diese beträge gibt oder eben nicht. je nach dem kommt dann eine zahl raus oder eben ein leeres feld (NULL) in meiner abfrage. die abfrage summiert mir ein paar werte über die abfragefunktion "summe". In der selben Abfrage kopiere ich diesen wert in ein neues feld welches ich mit Nz behandle. So habe ich entweder "0" oder meine Summe falls Zahlen vorhanden sind.

leider lassen sich diese neuen Felder aber nicht rechnen.

kann es sein dass ich die nz funktion am falschen ort anwende? oder wie soll ich NULL behandeln damit ich rechnen kann? möchte ich meine Summe einer anderen Zahl zu addieren geht das nur wenn die Summe nicht NULL ist. sonst rechnets auch nicht da ein Summand fehlt.

hmmm...

DominikSchweiz
13.06.2012, 19:40
ich habe nun folgende lösung gefunden...

statt Nz nehme ich folgenden ausdruck:

wenn(istNull([feld]=(-1);0;[feld])

...so kann er mit dem resultat rechen.

danke für Eure Inputs.

Dominik

Maxel
13.06.2012, 20:38
statt Nz nehme ich folgenden ausdruck:

wenn(istNull([feld]=(-1);0;[feld])
Warum Nz nicht funktioniert, kann ich nicht nachvollziehen.

Und
wenn(istNull([feld]=(-1);0;[feld])
kannst Du kürzer formulieren:
wenn(istNull([feld];0;[feld])
Aber: Siehe oben.

Anne Berg
14.06.2012, 08:46
Hallo,

noch besser klappt's, wenn die fehlende Klammer hinzugefügt wird:wenn(istNull([feld]);0;[feld]);)