Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: PawelPopolski am Oktober 23, 2024, 11:48:12

Titel: dlookup liefert Dezimalzahl mit komma
Beitrag von: PawelPopolski am Oktober 23, 2024, 11:48:12
Hallo,

ich greife mit
Dim Faktor As Single
        Faktor = Format(DLookup("[Faktor]", "qryFaktor", _
                "[IDMitarbeiter]=tempvars!UserID AND [Jahr]=jahr AND [Monat]=monat"), "#.##0.00")
auf eine Abfrage zu. Faktor wird in der Abfrage berechnet. Alles ist alle Deklarationen nutzen Zahlen.
Dlookup liefert mir aber z.B. 0,8. Wenn ich das dann weiterverarbeiten möchte
Dim SQL As String
        SQL = "UPDATE tblEinsatz " & _
              "SET EinAbg = True, Faktor = " & CSng(Faktor) & " " & _
              "WHERE EinDatum BETWEEN #" & Format(ErsterTag, "yyyy-mm-dd") & "# " & _
              "AND #" & Format(LetzterTag, "yyyy-mm-dd") & "# AND FKMAEin =" & TempVars!userID
       
        'SQL-Abfrage ausführen
        DoCmd.SetWarnings False
        DoCmd.RunSQL SQL
        DoCmd.SetWarnings True

verursacht DoCmd.RunSQL SQL Fehler 3144. Grund ist klar, das Komma.

Ich habe jetzt schon gefühlt alle Typumwandlungen getestet, nichts macht aus 0,8 die 0.8.

Hat jemand eine Idee, wie ich mein Dilemma lösen kann?
Titel: Re: dlookup liefert Dezimalzahl mit komma
Beitrag von: MzKlMu am Oktober 23, 2024, 12:01:29
Hallo,
siehe hierzu:
https://www.donkarl.com?FAQ6.21 (https://www.donkarl.com/?FAQ6.21)

PS1:
Ich würde niemals Single als Datentyp verwenden. Single als Fließkommazahl ist viel zu ungenau. Selbst bei Double ist das zu beachten. Wegen der Fließkommaproblematik könnte es auch sinnvoll sein Currency zu verwenden, auch wenn das Feld keine Währung ist.

PS2:
SQL ist ein reserviertes Wort und sollt Du nicht verwenden. Üblicherweise nimmt man da strSQL als Variablenname.

PS3:
Bitte Codetags verwenden. Ich habe sie oben eingefügt.
Titel: Re: dlookup liefert Dezimalzahl mit komma
Beitrag von: PawelPopolski am Oktober 23, 2024, 12:59:38
Na Super, du hast mir den Tag gerettet :-)

zu deinen PSsen:
PS2: Danke
PS3: Wieder was Neues gelernt
PS1: was bedeutet hier 'ungenau'? Ich bin ein Verfechter von "so klein wie möglich, so groß wie nötig". Da ich hier nur mit 2 Nachkommastellen arbeite dachte ich, single wäre ein gute Idee. Welche Probleme kann es geben?

Grüße,
Pawel
Titel: Re: dlookup liefert Dezimalzahl mit komma
Beitrag von: MzKlMu am Oktober 23, 2024, 14:17:59
Hallo,
der PC rechnet ja mit 0 und 1. Die Zahlen müssen aber im lesbaren Format dargestellt werden. Dadurch ergeben sich Rundungsfehler.

Zur Fließkommaproblematik findest Du jede Menge Infos im Internet. Aber es ist viel Mathe.

Eine kleine Funktion (Siehe Bild) verdeutlicht den Unterschied. Im Direktbereich siehst Du die Ergebnisse.
Da die Formatierung (auf 2 Kommastellen) rundet, können sich hier Probleme ergeben. Müssen nicht, aber können.
Daher ist für Felder mit Währung die Verwendung von Double (oder gar Single) tabu.
Währungsfelder rechnen mit Ganzzahlen und verschieben nur das Komma.

ZitatIch bin ein Verfechter von "so klein wie möglich, so groß wie nötig".
Die Zeiten sind vorbei, heute hat man massenhaft Speicher. Außerdem verbraucht Access nur soviel Speicherplatz wie benötigt.
Es ist auch völlig egal, ob Du für eine Textfeld 10 Zeichen oder 255 einstellst, es wird nur das gebraucht was eingetragen ist. Ich lasse alle Textfelder auf 255 stehen.

Titel: Re: dlookup liefert Dezimalzahl mit komma
Beitrag von: PawelPopolski am Oktober 23, 2024, 15:11:18
Danke :-)
Titel: Re: dlookup liefert Dezimalzahl mit komma
Beitrag von: Beaker s.a. am Oktober 24, 2024, 12:28:34
Zitat"so klein wie möglich, so groß wie nötig".
Spricht für den schon von Klaus vorgeschlagenem DatenTyp "Währung" (Currency).
Das ist der kleinste Typ mit Dezimalstellen und gross genug für 2 davon.