Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   IBSql vs. IBQuery (https://www.delphipraxis.net/160502-ibsql-vs-ibquery.html)

mquadrat 16. Mai 2011 15:32

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX

IBSql vs. IBQuery
 
Hallo zusammen,

ich habe heute etwas verwundert Folgendes festgestellt (Programm komplett gleich, gleiche DB / gleiche Daten):

Mache ich das Update-Statement mit einer TIBSQL findet sich anschließend in der DB ein anderer Float-Wert wie wenn ich das Statement mit einer TIBQuery an die Datenbank schicke. Der Unterschied scheint in der Behandlung der Parameter zu liegen. Bei der TIBSQL hatte der Parameter (TIBSQLVAR) direkt nach der Zuweisung mittels ParamByName().asFloat an der vierten Nachkommastelle einen anderen Wert, als er eigentlich haben sollte (Abweichung 0,0008). Bei Verwendung einer TIBQuery (TParam) und identischer Zuweisung ist keine Abweichung aufgetreten.


Was mich nun interessieren würde, wäre ob das jemand verifizieren kann oder das vielleicht eine der - immer wieder angekündigten, aber bis jetzt nicht aufgetretenen - Inkompatibiliäten zwischen IBX und Firebird ist.

tsteinmaurer 17. Mai 2011 07:07

AW: IBSql vs. IBQuery
 
Welcher Datentyp wird denn für das Feld in der Datenbank verwendet? Und welcher Dialekt (1 od. 3)?

mquadrat 18. Mai 2011 09:22

AW: IBSql vs. IBQuery
 
Dialect 1, Feld war erst ein float und später ein double (Wurde umgestellt, bevor mir aufgefallen ist, dass sich der Wert im Parameter ändert).


Wie gesagt, die Wertänderung tritt bereits im Parameter auf, also BEVOR die Query ausgeführt wird.

tsteinmaurer 18. Mai 2011 09:58

AW: IBSql vs. IBQuery
 
Generell hat man bei Dialect 1 und der Verwendung von FLOAT, DOUBLE es immer mit Rundungsproblemen zu tun.

daddy 18. Mai 2011 22:50

AW: IBSql vs. IBQuery
 
Könntest Du denn auch BCDs in Delphi bzw. "Decimal(Len,NK)" in Firebird verwenden? Damit sollte es eigentlich keine Rundungsprobleme geben.

hoika 23. Mai 2011 13:14

AW: IBSql vs. IBQuery
 
Hallo,

Zitat:

Dialect 1, Feld war erst ein float und später ein double
Das sind beides keine Firebird-Datentypen.
Wie heist der Typ genau ?


Heiko

mquadrat 23. Mai 2011 13:28

AW: IBSql vs. IBQuery
 
Nur nochmal, damit das nicht in die falsche Richtung läuft. Mir ist klar, dass sich manche Zahlen nicht exakt ausdrücken lassen und das diese Fehler in bestimmten Situationen recht groß werden können. Darum geht es aber explizit nicht!

Bei der Zuweisung in den Parameter mittels ParamByName().asFloat werden von IBSql und IBQuery unterschiedliche Werte im Parameter gesetzt. Lasse ich diese anschließend ausgeben habe ich eine Differenz im konkreten Fall von 0,008. Und das ist IMHO zu viel. Da die Query noch nicht abgefeuert wurde, würde ich den Fehler eher in den Komponenten vermuten.

hoika 23. Mai 2011 13:42

AW: IBSql vs. IBQuery
 
Hallo,

die beiden Zugriffskomponenten viell. interpretieren schon beim Zwischenspeichern
basierend auf dem tatsächlichen Datentyp das Ergebnis.
Ich hatte das Problem beim Umstieg von Paradox auf IB/FB und Decimal(8,2).

Deshalb noch mal die Frage.
Was ist der native Datentyp unter FB.


Heiko

mquadrat 23. Mai 2011 13:50

AW: IBSql vs. IBQuery
 
Also wenn double precision nicht der native Typ ist, dann müsstest du mir mal kurz sagen, wo ich die Info finde.

hoika 23. Mai 2011 14:12

AW: IBSql vs. IBQuery
 
Hallo,

also double precision höre ich hier das erste Mal ...
OK, mit Double Precision hatte ich bisher keine Probleme.


Heiko


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