Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TParam Problem (https://www.delphipraxis.net/81295-tparam-problem.html)

Shadow 24. Nov 2006 09:05

Datenbank: SQLite • Version: 3 • Zugriff über: Aducom

TParam Problem
 
Vielleicht kann mir jemand auf die Sprünge helfen .. verstehe die Konvertierung nicht ganz ;)

Ich möchte durch ParamByName eine Erstezung durchführen

(x : real;)

ParamByName('MiFlags_1').AsFloat := x;

Das funktioniert auch ....

komisch ist, wenn ich in dem x ein Wert wie z.B 10 stehen habe ersetzt er mir MiFlag_1 durch 10.0 und schreibt das
auch in die Tabelle so wie es sein soll. Hab ich in x einen Wert wie 10.3243 stehen legt er mir in der Datenbank den Wert
als 10,3243 ab .. also als Trennsymbol ein "," und kein Punkt, was natürlich nicht erwünscht ist.


Verstehe die Logik dabei nicht so ganz oder hab ich was nicht beachtet ?

Könnte natürlich den float in String wandeln das komma dann durch punkt ersetzen und rein schreiben oder so nen Workaround,
dennoch würde ich dies gerne vermeiden.

Hat da jemand ne idee wieso das so ist bzw. wie ich das beheben kann ?


Lg Andre

mkinzler 24. Nov 2006 09:13

Re: TParam Problem
 
Welchen Typ hat das Datenbankfeld? Welchen DezimalSeparator ist gesetzt?

Shadow 24. Nov 2006 09:15

Re: TParam Problem
 
DOUBLE ist der Typ in der Tabelle
DezimalSeperator ist '.'

mkinzler 24. Nov 2006 09:27

Re: TParam Problem
 
Wenn der Typ DOUBLE ist, legt er gar kein Trennzeichen in der Datenbank ab. Das Komme wird nur für die Anzeige verwendet. Komisch ist aber nur, das er nicht das voreingestellte nimmt.
10,3243 heißt dann ja 103243.

Shadow 24. Nov 2006 09:42

Re: TParam Problem
 
also wenn der Real Wert 10.3243 ist wieso heißt das dann 103243. ?

Also zur Einsicht der Daten benutze ich gerade SQLiteSpy

und da hab ich jetzt halt in z.B. dem Feld Zeiten_2 (DOUBLE) Werte mit '.' Trennung bei der Anzeige aber auch
Werte mit ',' drinne. (Halt das Problem was ich habe)

Wenn ich dann nen einfaches SQL Statment ausführe wie z.B.

SELECT "Zeiten_2" FROM "NumCh"
WHERE "Zeiten_2" > 80;

bekomme ich eine falsche Ergebnistabelle in der alle Werte drinne sind > 80 (was richtig ist) aber auch
alle anderen Werte die vermeindlich kleiner sind und die werden in der Ergebnistabelle mit ',' angezeigt,
scheinbar weil er das nicht als DOUBLE identifizieren kann kein Ahnung.

Wenn ich :

ParamByName('Zeiten_1').value := FloatToStr(DataSet.Zeiten[1]);

benutze sind die Werte korrekt in der Tabelle, find ich aber nicht gerade schön den weg ;)

Hast du noch eine Idee wieso er das so komisch ablegt ?

mkinzler 24. Nov 2006 10:35

Re: TParam Problem
 
Wie gesagt, werden die Werte in der Datenbank ohne Trennzeichen abgelegt. Wie wurden die Werte in die DB geschrieben? Sind die eingstellten Dezimal bzw. Tausendertrenner beim Einfügen und Anzeigen identisch?

Shadow 24. Nov 2006 10:48

Re: TParam Problem
 
Zitat:

Wie wurden die Werte in die DB geschrieben?
Weis nicht genau was du jetzt meinst, vielleicht das ?


das sind die sql befehle ... nur stark gekürzt.
SQL-Code:
 

NumCHInsertMySQL =  'INSERT INTO :table ' +
                      'VALUES(' +
                      'null,                ' {ChKey}          +
                      ':Zeiten_2,           ' {Zeiten_2}       +
                      ');';

create noch :

 NumChCreateTableSQL  = 'CREATE TABLE IF NOT EXISTS' +
                          ' :table(id INTEGER PRIMARY KEY AUTOINCREMENT ,' +
                          '   Zeiten_2 DOUBLE' +
                          ' );';
Zitat:

Sind die eingstellten Dezimal bzw. Tausendertrenner beim Einfügen und Anzeigen identisch?
wenn du den dezimalseperator meinst .. beim schreiben '.' und anzeigen lass ich sie im moment mit SQLiteSpy bzw. SQliteMan3.

meintest du das?

Tendiere mittlerweile fast dazu :
ParamByName('Zeiten_1').value := FloatToStr(DataSet.Zeiten[1]);
so ist die Tabelle wenigstens ok.

Oder spricht etwas gegen die umwandlung die ich nicht berücksichtigt habe ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 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