![]() |
Datenbank: MySQL • Zugriff über: ZEOS
TStringList nimmt double's falsch an!
Hallo zusammen,
ich hab folgendes Problem. Zum Update eines Eintrages in der Datenbank bekomme ich einen double-Wert. Diesen muss ich in eine TStringList schreiben und dann die Datenbank updaten. Im double-Wert steht z.b.: 12.22 Wenn ich diesen double-Wert in die TStringList adde, wird daraus 12,22 gemacht. Die MySQL Datenbank braucht aber 12.22! Ich hab schon probiert, den Vor- und Nachkommateil zu separieren und dann quasi von Hand ein Punkt dazwischen zu machen. Aber das funktioniert auch nicht. Wenn ich von Hand 12.22 im Code in die TStringList eintrag, funktioniert es. Hat jemand ne Idee, an was es liegen könnte?? Gruß Chefsalat |
Re: TStringList nimmt double's falsch an!
Setze den Dezimaltrenner in deinem Programm entweder so wie er in der DB ist. Aber das ist bescheuert für den User, der das nicht umsonst so eingestellt hat.
Ich hab's gerade nicht im Kopf, aber es gibt sicherlich auch eine Konvertierungsfunktion für Double -> String, die als Parameter ein Format oder einen Dezimaltrenner schluckt. Normalerweise sollten DB Client und das lokale System mit den gleichen Regionaleinstellungen laufen. Denn dieser Unterschied 12.2 <-> 12,2 kann nur durch einen verkorkste Client Installation entstehen. Falls du keine Kontrolle über den DB Client auf dem Zielsystem hast, musst du zwangsläufig immer zwischen den lokalen Regionaeinstellungen und denen des Clients konvertieren. Wenn du einfach den Double als Double herausholst und auch in SQL-Parametern als Double benutzt, solltest du a) keine mehr Probleme haben und b) witzlose Umwandlungen einsparen. |
Re: TStringList nimmt double's falsch an!
Zitat:
|
Re: TStringList nimmt double's falsch an!
Zitat:
|
Re: TStringList nimmt double's falsch an!
Hi,
Zeig doch mal, wie du den double in die Stringlist addest. Es kommt ja nicht ein Dezimalkomma von alleine rein, wenn Du es selbst zusammenbaust. Ich würd's so machen:
Delphi-Quellcode:
Dann sollte doch der double mit Dezimalpunkt im String stehen und nicht mit Komma.einString := StringReplace(FloatToStr(einDouble),DecimalSeparator,'.',[]); strList.Add(einString); Gruss Thomas //edit: Oh, sorry, hab die falsche Sprache genommen, aber so ähnlich geht's ja auch in C++ //edit |
Re: TStringList nimmt double's falsch an!
Es gibt doch die schöne Variable
Code:
die man auf '.' setzen kann. Und schon funzt FloatToStr wie gewünscht *g*
DecimalSeparator
|
Re: TStringList nimmt double's falsch an!
So hab haben wir es auch gemacht, gelle?
Gruß Chefsalat |
Re: TStringList nimmt double's falsch an!
Zitat:
|
Re: TStringList nimmt double's falsch an!
Hai Chefsalat,
warum speicherst Du deinen Zahlenwerte denn als String in einer TStringList? Wenn Du diese (unnötige) Umwandlung vermeidest wirst Du auch keine Probleme mehr haben die Daten in die Datenbank zu schreiben. |
Re: TStringList nimmt double's falsch an!
@Sharky: Glaub mir, es gibt dafür Gründe....
In Delphi kannst Du mit einer überladenen Funktion von FloatToStr() die "FormatSettings" mitgeben. Die musst Du erst mal auslesen und kannst dann das Komma evtl. durch den Punkt ersetzen. Damit Du das nicht 10 Mio. mal im Code machen musst, kannst Du dir ja ne eigene Funktion FloatTOStr schreiben, die genau das macht.... Grüße Lemmy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz