Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Fehler bei Berechnung

Begonnen von Ratoncito, März 19, 2020, 11:45:32

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

ZitatWas soll mir das sagen, was muss ich wo eintragen?

Wenn Du das jetzt immer noch nicht weißt, dann solltest Du Dich wirklich zunächst und als Erstes mit den Grundlagen von Access und allgemein mit der Wirkungsweise von Funktionen und mathematischen Ausdrücken bei der VBA-Programmierung intensiv beschäftigen, z. B. mit Tutorials und Fachbüchern.

Ohne diese Kenntnisse  wirst Du Deine (gleichen) Fragen immer wieder stellen und die Antworten nicht verstehen.


Zitat..wo und wie CCur eingesetzt werden sollte..

Ist Dir denn bekannt, was diese Funktion bewirkt?  Stelle den Cursor (Schreibmarke) im VBA-Editor auf diese Funktion und drück F1.. 

Einsetzen musst Du die Funktion dort, wo sie erforderlich ist oder wird, soll heißen in irgendeiner Berechnung (in Abfragen, in Steuerelementinhalten, in VBA-Prozeduren,  wo denn sonst..), wie schon öfters gezeigt.
Zitat
Das Nz hatte ich verwendet, weil leere Felder einen Fehler in der Wenn-Formel verursachten.

Im Grunde ist das richtig, nur die NZ()-Funktion ist syntaktisch und logisch falsch eingesetzt.

Die NZ()-Funktion macht nur Sinn, wenn sie auf ein Feld/Variable (nicht mathematischer Ausdruck) mit Datentyp Variant wirkt.

Die NZ()-Funktion auf einen mathematischen Ausdruck anzuwenden, ist Unsinn,  weil ein solcher Ausdruck nie NULL (nichts, leer, nicht existent) sein kann.  NULL ist hier nicht der Wert 0.



Zitataber mir und anderen Anfängern immer wieder Probleme bereiten

Das ist uns bekannt, und wir helfen gerade deswegen ja auch...   Nur sollten die Ratschläge und Lösungen auch mal durchdacht und verstanden werden und auch einen gewissen Fortschritt zeigen.

MzKlMu

Hallo,
beantworte mal noch diese Frage:
ZitatKann der Nennwert und/oder Stück NULL sein ?
Gruß Klaus

ebs17

Grundlegend: Ein Computer rechnet immer noch wie vor 50 Jahren mit dem Binärsystem (Bit: 1 oder 0), vervielfältigt dann auf Bytes (8 Bit) und Vielfache davon. Das Dezimalzahlensystem, mit dem wir gewohnt sind umzugehen, ist ein ganz anderes. Die Umrechnung hat ihre Tücken, was sich weniger bei Ganzzahlen, aber eben bei Teilen von Ganzzahlen (=> Dezimalstellen) darstellt. Der mögliche (Rest)Fehler stellt sich in der Fließkommazahlenproblematik dar. Das hat jetzt mit Access nur so weit zu tun, dass auch Access einen Computer und dessen Betriebssystem benutzt.

Höhere Genauigkeiten (Festkomma statt Fließkomma und damit Vermeidung von Umrechnungsresten) werden über andere Datentypen mit größeren Bytebreiten erkauft, also mit mehr Aufwand zum Rechnen.

Wenn man jetzt rechnet, kommt einiges zusammen:
- Datentypen der Ausgangswerte
- Art der Berechnung

Bei einer Berechnung eines Ausdruckes in einer Jet-Abfrage wird der resultierende Datentyp des Ergebnisses i.d.R. von Jet selber ermittelt und vergeben, und da wird in die ganz kleine Kiste gegriffen (=> Long, Double, Text, Boolean - man will ja sparen), für resultierende Dezimalzahlen also Double mit der vielfachst erläuterten Fließkommazahlenproblematik. Ein CCur darauf kommt erst nachträglich zur Wirkung, kann also helfen durch Abschneiden von Dezimalstellen (die aber entstanden sein können), muss es aber nicht, weil es erst später zur Wirkung kommt. So etwas würde aber ein zielgerichtetes Runden sauberer, nachvollziehbar und steuerbar auch ausführen.
CCur ... ist eine Konvertierungsfunktion (Typumwandlungsfunktion: ein Datentyp in einen anderen). Bei einem Umrechnen können auch Späne entstehen. Hin- und Herrechnen macht vielen richtig Spaß. Aber: Aufwand ist es allemal, der sich summiert irgendwann auch auf die Laufzeit niederschlagen kann. Und wie sagt der Klimaschützer: Über das Treibhausgas, das ich nicht erzeuge, muss ich mir nicht die Gedanken machen, es zu entsorgen oder mit dessen Problemen zu leben.

Ist das verständlich?

Nz ... ist eine Funktion des Access-Objektes.
Felder einer Datenbanktabelle dürfen, wenn nicht explizit ausgeschlossen, nichts (=> NULL) enthalten. NULL ist das Unbekannte, Nichtdefinierte. Damit kann man nicht rechnen, nicht vergleichen, daher kommen auch Fehler bei unmittelbarer Verwendung.
0 und NULL ist ein Riesenunterschied. Schulden vom Wert 0 ist etwas ganz anderes als Schulden ungebannter Größe.

Per Nz kann man für einen NULL-Inhalt einen Ersatzwert setzen. Also tun wir bei Zahlen z.B. so, dass Schulden, die nicht bekannt sind, den Wert 0 haben. Mit 0 kann man mathematisch weiterrechnen und hat dann nur bekannte Fehler, z.B. bei Division durch 0.

Ein Nz auf eine Konstante ( 17, 23, 0) macht überhaupt keinen Sinn, noch weniger, als wenn man sein angeheiratete Ehefrau täglich fragt, ob sie eine Frau ist, denn dieses könnte sich womöglich ändern. Eine Konstante heißt konstant, weil sie konstant ist.
Prüfen und ggf. ersetzen müsste man also nur, was sich wirklich ändern kann, also immer nur den Tabellenfeldinhalt als Quelle an sich. Eine Prüfung auf einen Berechnungsausdruck ist dann nur ein schlecht gemachtes Alibi, weil es zeigt, dass man Grundlagen gar nicht verstanden hat. Zudem wird es dann unpräzise und erschwert eine Fehlersuche - das Schießen in den Nebel verspricht eine geringere Trefferwahrscheinlichlkeit.

Was hast Du jetzt besonders gut verstanden.
Mit freundlichem Glück Auf!

Eberhard

Ratoncito

Hallo,

vielen Dank für die ausführlichen Antworten.
Fundierte Kenntnisse erleichtern ohne Frage die Erstellung einer DB oder die Lösung der dabei auftretenden Probleme. Aber irgendwann beginnt man mit einem kleinen, einfachen Projekt. Mit der Zeit werden diese anspruchsvoller...
Wir alle schlagen uns jährlich erneut mit unserer Steuererklärung herum obwohl die wenigsten Steuerberater sind.  :)

Zitat von: MzKlMu am April 12, 2020, 18:25:40
Hallo,
beantworte mal noch diese Frage:
ZitatKann der Nennwert und/oder Stück NULL sein ?

Ja.

Nach dem Hinweis von Beaker s.a. habe ich die Tabelle geändert. Statt der Felder Nennwert und Stueck gibt es nur noch ein Feld Anzahl. Durch die nötigen Änderungen in Formularen, Abfragen und VBA ist mein ursprüngliches Problem beseitigt.
Bei dieser Gelegenheit habe ich direkt alle Felder, die an Berechnungen beteiligt sind, auf Datentyp Währung umgestellt.

Zitat von: ebs17 am April 12, 2020, 23:09:55
Ein Nz auf eine Konstante ( 17, 23, 0) macht überhaupt keinen Sinn, noch weniger, als wenn man sein angeheiratete Ehefrau täglich fragt, ob sie eine Frau ist, denn dieses könnte sich womöglich ändern. Eine Konstante heißt konstant, weil sie konstant ist.

Mit dem was in der heutigen Zeit alles möglich ist...
Von Zeit zu Zeit sollte man da eventuell doch mal prüfen  :D

Nochmal vielen Dank für die Erklärungen.

LG - Wolfgang