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?
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.
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
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.
Danke :-)
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.