Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   wert kommt falsch in der DB an (https://www.delphipraxis.net/164010-wert-kommt-falsch-der-db.html)

khh 25. Okt 2011 13:09

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

wert kommt falsch in der DB an
 
hallo zusammen,
folgendes Phänomen:
ich übergebe an die DB per sql-statement einen currency-wert.
Das Feld in der DB ist decimal(18,4)

so weit so gut

0,2 in der db steht 0,2000
2,2 in der db steht 2,2000
1,3 in der db steht 1,3000

1,2 in der DB steht 1,1999

kann das jemand nachvollziehen, oder erklären?

Danke für eure Mühe


Gruss KHH

Bummi 25. Okt 2011 13:14

AW: wert kommt falsch in der DB an
 
http://www.delphipraxis.net/149242-f...ml#post1007622

Union 25. Okt 2011 13:14

AW: wert kommt falsch in der DB an
 
Castest denn Du die Anzeigewerte auch als Decimal?

khh 25. Okt 2011 13:32

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von Bummi (Beitrag 1132438)

danke für den Link, aber der Fehler tritt ja nur genau bei dem wert 1,2 auf

alle anderen Dezimalwerte werden richtig in die Db eingetragen

khh 25. Okt 2011 13:33

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von Union (Beitrag 1132439)
Castest denn Du die Anzeigewerte auch als Decimal?

Die Anzeige zu casten ist nicht das Problem,
der Wert 1,2 wird als 1,1999 in die Datenbank eingetragen, alle andern Werte 0,2 1,3 usw.
stehen richtig drin.

Lemmy 25. Okt 2011 13:40

AW: wert kommt falsch in der DB an
 
Hallo,

welchen Dialect hat die FB-DB? Wie hast du die Werte eingetragen? Nur per Programm oder auch mal per IBExport, FlameRobin,....?

Union 25. Okt 2011 13:45

AW: wert kommt falsch in der DB an
 
Zitat:

Die Anzeige zu casten ist nicht das Problem,
der Wert 1,2 wird als 1,1999 in die Datenbank eingetragen, alle andern Werte 0,2 1,3 usw.
Woher weißt Du das? Schaust Du die DB hexadezimal an?

khh 25. Okt 2011 13:55

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von Lemmy (Beitrag 1132448)
Hallo,

welchen Dialect hat die FB-DB? Wie hast du die Werte eingetragen? Nur per Programm oder auch mal per IBExport, FlameRobin,....?

Dialekt muss ich erst nachsehen, ich denke aber 3
wenn ich die Werte über IBexpert eintrage funktionierts.
Ein Bug in ZEOS??

khh 25. Okt 2011 13:56

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von Union (Beitrag 1132450)
Zitat:

Die Anzeige zu casten ist nicht das Problem,
der Wert 1,2 wird als 1,1999 in die Datenbank eingetragen, alle andern Werte 0,2 1,3 usw.
Woher weißt Du das? Schaust Du die DB hexadezimal an?

ich gehe mal davon aus, dass IBexpert und Flamerobin die Werte richtig anzeigen.

Union 25. Okt 2011 13:58

AW: wert kommt falsch in der DB an
 
Die zeigen die Werte so an, wie es in dem jeweiligen Tool programmiert wurde.

Lemmy 25. Okt 2011 14:02

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von khh (Beitrag 1132453)
Dialekt muss ich erst nachsehen, ich denke aber 3
wenn ich die Werte über IBexpert eintrage funktionierts.
Ein Bug in ZEOS??

dann mach mal ein "Select *" in einer Zeos-Query auf die Tabelle und lass die Felder erzeugen und schau die mal den Datentyp an, den Zeos für diese Spalte verwendet. Ich habe die leider nicht installiert...

GRüße

khh 25. Okt 2011 14:04

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von Union (Beitrag 1132455)
Die zeigen die Werte so an, wie es in dem jeweiligen Tool programmiert wurde.

Damit wir uns nicht missverstehen:

ich trage einen Wert per "ZEOS-Statement" aus meiner Anwendung in die DB ein,
aus 1,3 wird 1,3000 wenn ich den Wert mit IBexpert anschaue.
aus 0,2 wird 0,2000 dito
aus 1,2 wird 1,1999 dito

wo liegt der Fehler ?

p80286 25. Okt 2011 14:06

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von khh (Beitrag 1132454)
ich gehe mal davon aus, dass IBexpert und Flamerobin die Werte richtig anzeigen.

jo genau das ist das!
Es handelt sich um eine Anzeige!
Und je mehr Schnittstellen sich zwischen DB und Clientanzeige befinden, desto mehr wird das zum Glücksspiel.
Was ist denn, wenn Du Dir die Daten gleich so abholst:
SQL-Code:
select to_char(myValue,'999999.99') from mytable
Gruß
K-H

Edith:
Zitat:

ich trage einen Wert per "ZEOS-Statement" aus meiner Anwendung in die DB ein,
Wie machst Du das denn? Source?

khh 25. Okt 2011 14:22

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von p80286 (Beitrag 1132460)
Zitat:

Zitat von khh (Beitrag 1132454)
ich gehe mal davon aus, dass IBexpert und Flamerobin die Werte richtig anzeigen.

jo genau das ist das!
Es handelt sich um eine Anzeige!
Und je mehr Schnittstellen sich zwischen DB und Clientanzeige befinden, desto mehr wird das zum Glücksspiel.
Was ist denn, wenn Du Dir die Daten gleich so abholst:
SQL-Code:
select to_char(myValue,'999999.99') from mytable
Gruß
K-H

Edith:
Zitat:

ich trage einen Wert per "ZEOS-Statement" aus meiner Anwendung in die DB ein,
Wie machst Du das denn? Source?

die function to_char kennt firebird nicht.

das Statment funktioniert nach folgendem
Schema
Delphi-Quellcode:
  Query1.SQL.add('select ......');
  Query1.open;
  Query1.append;
Delphi-Quellcode:
 Query1['feld']:= Fwert;
 Query1['feld2']:= Fwert2;
  usw.
  usw.
  query1.post

p80286 25. Okt 2011 14:27

AW: wert kommt falsch in der DB an
 
Und da ist kein
Delphi-Quellcode:
.asfloat
oder ähnliches dazwischen?
Ich mißtraue diesen "intelligenten" Lösungen wann immer sie mir über den Weg laufen.

Gruß
K-H

khh 25. Okt 2011 14:49

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von p80286 (Beitrag 1132467)
Und da ist kein
Delphi-Quellcode:
.asfloat
oder ähnliches dazwischen?
Ich mißtraue diesen "intelligenten" Lösungen wann immer sie mir über den Weg laufen.

Gruß
K-H

nee da ist höchstens ein asCurrency drunter :-)

was mich daran wundert ist eben, dass nur dieser eine Wert nämlich 1,2 falsch rüber kommt

Lemmy 25. Okt 2011 14:57

AW: wert kommt falsch in der DB an
 
Hi,

Zitat:

Zitat von khh (Beitrag 1132475)
nee da ist höchstens ein asCurrency drunter :-)
was mich daran wundert ist eben, dass nur dieser eine Wert nämlich 1,2 falsch rüber kommt

aber auch nur dann, wenn das Feld wirklich Currency verarbeiten kann. Deshalb nochmal die Bitte die Feldtypen zu prüfen (s. Post ganz oben...)

p80286 25. Okt 2011 15:09

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von khh (Beitrag 1132475)
nee da ist höchstens ein asCurrency drunter :-)

Eins von wieviel? Laß Dir doch nicht alles aus der Nase Ziehen.

Und um das noch einmal zu betonen: Was Du (und die meisten von uns) siehst, ist nur die Darstellung von Daten, das sind nicht die Daten selber! Und an Darstellung kann man drehen.

Gruß
K-H

khh 25. Okt 2011 15:23

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von p80286 (Beitrag 1132483)
Zitat:

Zitat von khh (Beitrag 1132475)
nee da ist höchstens ein asCurrency drunter :-)

Eins von wieviel? Laß Dir doch nicht alles aus der Nase Ziehen.

Und um das noch einmal zu betonen: Was Du (und die meisten von uns) siehst, ist nur die Darstellung von Daten, das sind nicht die Daten selber! Und an Darstellung kann man drehen.

Gruß
K-H

wie ich schon oben erwähnte die syntax ist nach diesem schema:

Code:
Query1['feld']:= Fwert;
wobei Fwert von Type Currency ist,
das entsprechende Feld in der DB ist decimal(18,4)

was willst sonst noch wissen?

p80286 25. Okt 2011 15:47

AW: wert kommt falsch in der DB an
 
So mach ich es über ADO (mit ZEOS hab ich wenig am Hut):
Delphi-Quellcode:
query1.sql:='update mytable set field1=:myvalue where id=:myid';
query1.Parambyname('myvalue').value:=myvaluefromanywhere;
query1.Parambyname('myid').value:=myidfromanywhere;
query1.execsql;
und das Lesen
Delphi-Quellcode:
myCurrencyVar:=query1.Fieldbyname('Field1').AsFloat;
Gruß
K-H

khh 25. Okt 2011 20:06

AW: wert kommt falsch in der DB an
 
kann hier jemand der ZEOS nutzt den Fehler mal nachvollziehen?

hoika 25. Okt 2011 20:42

AW: wert kommt falsch in der DB an
 
Hallo,

ZEOS hatte ich damals "abgewählt" aus diversen Gründen.

Was passiert, wenn du statt Decimal einfach Double Precision nimmst ?


Heiko

khh 26. Okt 2011 08:31

AW: wert kommt falsch in der DB an
 
Zitat:

Zitat von hoika (Beitrag 1132543)
Hallo,

ZEOS hatte ich damals "abgewählt" aus diversen Gründen.

Was passiert, wenn du statt Decimal einfach Double Precision nimmst ?


Heiko

damit funktionierts,hab damit zwar nur 3 Nachkommastellen, aber das ist in dem Fall egal.
Danke dir für den Tipp.


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