Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Floatwerte in Datenbanken speichern (https://www.delphipraxis.net/182579-floatwerte-datenbanken-speichern.html)

macDoe 2. Nov 2014 16:08

Datenbank: Jede • Version: alle • Zugriff über: NativeDB, ODBC

Floatwerte in Datenbanken speichern
 
Moinsn..

Ich habe da folgende Frage...
wenn Ich einen Floatwert in eine DB, in diesen Fall MS SQL 2012 aber das spielt keine Rolle, schreiben möchte über eine normale SQl query wie..

Update Test set Kohle = '123.34' where Rowid = 1

Dann darf das natürlich nicht '123,34' heissen sonst knallt es.
Wenn man aber die SQL Abfragen individuell baut sind das nun mal Strings.

So etwa :

DM.DatMod.oq3.SQL.Add(' Update Test set Kohle = ''' + s + ''' ');

'S' darf hier natürlich kein Float sein.

Da aber selbst die StrToFloat Methode den Wert mit Komma zurück gibt weil wir halt in Deutschland sind ist das doof.

Ich finds ja toll das Windows und die Datenbanken mir in Deutschland ein Komma als Dezimaltrenner hinpinseln auch wenn in der
DB ein Punkt steht, aber an dieser Stelle ist das echt Mist. Klar, Ich kann natürlich statt Floats einfach Strings nehmen und schon klappt das.
Aber mit Strings rechnet man so schlecht...

Ich suche nun einen Weg meine Inszantvariablen als Float zu deklarieren und gleichzeitig keine Probleme zu habe wenn Ich sie in die
DB schreiben möchte. Im Moment konvertiere ich das hin und her - aber mal ehrlich, wie Elegant ist das denn?

Ja, Ich weiß...da gibt es was mit Formatierunseinstellungen aber Ich möchte meiner Applikation nicht vorgauckeln in Amiland zu sein.
Naja, vermutlich ist das so banal das ich mich grad zur Lachnummer mache, aber wenn Ich eins kann dann das :)



es grüßt..
der Frank

vagtler 2. Nov 2014 16:09

AW: Floatwerte in Datenbanken speichern
 
Verwende Parameter.

hstreicher 2. Nov 2014 18:05

AW: Floatwerte in Datenbanken speichern
 
Die vorstehende Antwort mit den Parametern ist die bessere Wahl ,

also etwas so
Delphi-Quellcode:
query.sql.clear;
query.sql.add('update TEST set KOHLE=:WERT');
query.sql.prepare

query.parambyname('WERT').asfloat= 123.45;
query.execsql;
der Paramert , im Beispiel "Wert" kann eine beliebige Zeichenfolge sein
wichtig das der Doppelpunkt davor

alternativ einfach ein Stringreplace und das Komma mit einem Punkt ersetzten

mfg Hannes

himitsu 2. Nov 2014 18:38

AW: Floatwerte in Datenbanken speichern
 
Zitat:

Da aber selbst die StrToFloat Methode den Wert mit Komma
Nein, vorallem nicht wenn man den zweiten Parameter von Delphi-Referenz durchsuchenFloatToStr benutzt.
Nja, falls dein Delphi passt, wobei du ja nicht nennst was du verwendest.


Ansonsten wurden die Parameter ja bereits genannt und sie sind auch gleich gut gegen eine SQL-Injection, z.B. wenn man
Delphi-Quellcode:
1"; DROP DATABASE xxx;
in dein S reinbekommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 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-2025 by Thomas Breitkreuz