4.2k Aufrufe
Gefragt in Datenbanken von Mitglied (335 Punkte)
Ein gesundes neues Jahr an die Support Gemeinde :)

Offensichtlich habe ich über Weihnachten alles vergessen, was ich über Access wusste.

Ich möchte in einer Abfrage ein berechnetes Feld einfügen, jedoch habe ich das Problem, dass nicht in allen Feldern, mit denen gerechnet wird auch ein Wert steht, also Leer ist.

Dementsprechend wird auch nichts für den Datensatz berechnet.

Hat hier vielleicht einer eine Lösung, dass trotzdem gerechnet wird?

Gruß

Peter

12 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
hallo,

normalerweise wird mit Null bei einem leeren Feld gerechnet.

Bei einer Muliplikation erhälst du somit als Ergebnis 0

Du könntest mit einer Wenn-Abfrage und einen Dummywert 1 wenn das Feld leer ist trotzdem rechnen.

Gruß

Helmut
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Helmut,

leider hat er nicht Null genommen.

Aber ich habe es auch, wie Du vorgeschlagen hast, mit einer If-Schleife gelöst.

Dachte, dass es vielleicht noch einen eleganteren Weg gibt ;).

Danke.

Peter
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

da ich bei Datenbanken nicht so fit bin, kann eine Bessere Lösung nur von einem Fachmann kommen

Gruß

Helmut
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Kein Problem,

bin ich ja auch nicht :).

Unsere Lösung funktioniert ja auch.

Peter
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Na wenn Du nach einer anderen Lösung suchst müsstest Du schon hinschreiben was Du rechnen willst. Also ein Beispiel welche Rechenart Du brauchst, wie Deine Felder beispielsweise heißen und welche davon leer sein können.

Die elegantere Lösung wäre sicherlich ein Ausdruck mit nz .

Gruß Marie
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo Marie,

zunächst bitte ich um Entshuldigung für meine späte, aber ich gehöre zum reisenden Volk und habe leider kaum Internetmöglichkeiten.

Rechnen will ich eigentlich nur mit den Grundrechenarten.

Z. B. will ich von den Listenpreisen Prozentsätze abziehen und Transportkosten hinzu addieren.

Außer den Listenpreisen können alle Werte auch Null sein, da ich nicht immer gleich Transportkosten und Rabattsätze parat habe.

Wie meinst Du das mit nz?

Danke

Peter
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Peter,
bei leeren Tabellenfeldern kann man in einem Feld im Abfragefenster mit der Wenn-Funktion und IstNull arbeiten.
Hier ist z.B. das Tabellenfeld [test] teilweise leer. Wenn es leer ist, soll der Text "leer" erscheinen, sonst der Quotient.
A: Wenn(IstNull([test]);"leer";[f1]/[test])
Im SQL-Fenster steht denn dafür:
IIf(IsNull([test]),"leer",[f1]/[test])


Ausgabe:
f1 test A
2 4 0,5
1 leer
2 4 0,5
2 leer
1 4 0,25
1 leer


Gruß
lorf
0 Punkte
Beantwortet von marie Experte (2k Punkte)
@lorf:

Sorry lorf, so geht das nicht, wenn er rechnen will in Access, dann muss er Zahlenfelder benutzen und wenn er Zahlenfelder benutzt kann er nicht das Wort leer reinschreiben.

Ausserdem habe ich ihn so verstanden, dass er genau das Gegenteil will, nämlich dass etwas gerechnet wird, auch wenn in einem Feld nichts drinsteht. Und deshalb habe ich ihn gefragt was er rechnen will, denn um ihm die nz-Funktion hinschreiben zu können, muss man das halt exakt wissen was er will und wo das leere Feld überall sein kann. Man muss ja auch ausschließen, dass eine Division durch 0 durchgeführt wird, aber die Verrenkung brauch ich ja nicht zu machen, wenn gar nicht dividiert wird. Und wenn es eine Multiplikation ist, dann muss ich wissen ob beide Stellen leer sein können oder sogar nocht mehrere und am einfachsten wäre es halt eben gegangen, wenn er mal geschrieben hätte worum es genau geht, also beispielsweise so:

z1, z2, z3 z4, E sind Zahlenfelder, können alle leer sein oder aber halt nur teilweise. Es muss dann E = (z1 + z2) * z3 gerechnet werden.

Oder aber z1 und z2 und E sind Textfelder, dan brauchste nicht mit NZ zu rechnen, dann kannste einfach mit val() rechnen und brauchst auch nicht abchecken ob da 0 oder nix drinsteht, ausser wenn eine Division vorkommt.

@Peter:
Da du leider nicht hingeschrieben hast was Du für Felder hast muss ich das jetzt mal tun:
es sei LP der Listenpreis, p der Prozentsatz und T die Transportkosten und Deine Rechnung dann
E(rgebnis) = LP - p + T

Falls Du unsinnigerweise wirklich alles in Textfelder geschrieben hast, dann kannste einfach schreiben
E: Val ([LP]) - val ([p]) + val ([T]), val ist der Wert und der Wert von einem leeren Feld ist genauso 0 wie die 0 selbst oder irgendein Text, der da drinsteht

Ich gehe jetzt aber mal davon aus, dass alle Felder Zahlenfelder sind. Dann hast Du mehrere elegante Lösungsmöglichkeiten:
Du kannst bei allen Zahlenfeldern im Tabellenentwurf Standardwert 0 eintragen, dann wird automatisch grundsätzlich sofort beim Anlegen eines neuen Datensatzes in jedes leere Zahlenfeld eine 0 eingetragen. Dann wäre Deine Rechnung E:[LP] - [p] + [T] immer richtig, weil mit 0 gerechnet wird, solange keiner die 0 löscht ohne eine andere Zahl einzutragen.

Wenn Du allerdings sicher gehen willst, dass auch dann richtig gerechnet wird, wenn Dir einer die 0 rauslöscht, dann schreibste: E: nz([LP]) - nz([p]) + nz([Z])

Gruß Marie

PS: Und künftig wäre nett, wenn Du exakt schreiben würdest was Du für eine Rechnung ausführen willst und eventuell noch wie Deine Felder heißen und insbesondere ob es Textfelder oder Zahlenfelder sind, dann geht alles viel schneller.
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Liebe Marie,
dies ist ein freies Land und jeder kann mit seinen NULL-Werten rechnen wie er will. Du kannst sie meinetwegen auch ausdrucken und auffädeln oder in Stein meißeln. Ist OK. Ich habe am Liebsten diese von mir angegebene Form, du nimmst lieber NZ. Mach das, wenn es dich glücklich macht. Im Übrigen: Was gibts an meinem Beispiel nicht zu verstehen? Ich habe 2 Tabellenwerte, einer hat nur teilweise Werte und über die Formel wird für A: die Ausgabe erzeugt, wo auch "leer" dazwischen steht. OK, ich hätte auch 0 hinschreiben können, aber so fand ich es offensichtlicher.
Mir fällt dazu jetzt nichts weiter mehr ein.

Einen schönen Tag noch und Gruß
lorf
0 Punkte
Beantwortet von Mitglied (335 Punkte)
Hallo an alle,

zunächst mal danke für Eure Antworten.

Alle meine Felder sind Nummernfelder und Du hast Recht ,Marie, ich rechne Listenpreis - Rabatte + Transportkosten.

Das mit den Standardwerten auf Null ist eine super Lösung und das nz probiere ich gleich morgen und berichte dann.

Entschuldige bitte, dass ich nicht alle Informationen gleich verständlich formuliert habe.

Ich glaube, dass sich das in Zukunft bessern wird, weil ich sicherlich noch mit einigen Fragen kommen werde, und ich ein geübter Fragesteller werde ;).

Danke für eure Hilfe.

Gruß

Peter
...