AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C++ TStringList nimmt double's falsch an!
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList nimmt double's falsch an!

Ein Thema von Chefsalat · begonnen am 19. Aug 2006 · letzter Beitrag vom 19. Aug 2006
Antwort Antwort
Chefsalat

Registriert seit: 16. Aug 2006
6 Beiträge
 
#1

TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 10:29
Datenbank: MySQL • Zugriff über: ZEOS
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
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 10:37
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.607 Beiträge
 
#3

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 10:40
Zitat von Elvis:
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.
Hi. Ich befürchte ich kenne die Umgebung. Da wird ein SQL-Statement als String zusammengebaut und an die DB geschickt. Ist also nix mit Double direkt übergeben.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 10:55
Zitat von Phoenix:
Hi. Ich befürchte ich kenne die Umgebung. Da wird ein SQL-Statement als String zusammengebaut und an die DB geschickt. Ist also nix mit Double direkt übergeben.
Dann muss er es ja nur noch richtig machen und gut ist.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 11:03
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:

  einString := StringReplace(FloatToStr(einDouble),DecimalSeparator,'.',[]);

  strList.Add(einString);
Dann sollte doch der double mit Dezimalpunkt im String stehen und nicht mit Komma.

Gruss

Thomas

//edit: Oh, sorry, hab die falsche Sprache genommen, aber so ähnlich geht's ja auch in C++ //edit
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.607 Beiträge
 
#6

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 11:05
Es gibt doch die schöne Variable
Code:
DecimalSeparator
die man auf '.' setzen kann. Und schon funzt FloatToStr wie gewünscht *g*
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Chefsalat

Registriert seit: 16. Aug 2006
6 Beiträge
 
#7

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 11:09
So hab haben wir es auch gemacht, gelle?

Gruß Chefsalat
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 11:09
Zitat von Phoenix:
Es gibt doch die schöne Variable
Code:
DecimalSeparator
die man auf '.' setzen kann. Und schon funzt FloatToStr wie gewünscht *g*
Wie gesagt, das ist bescheuert für den User. Denn alle Dezimalwerte in Controls werden dann ebenfalls mit dem Trenner dargestellt.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 15:27
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.
Stephan B.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: TStringList nimmt double's falsch an!

  Alt 19. Aug 2006, 17:46
@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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz