![]() |
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. |
AW: IBSql vs. IBQuery
Welcher Datentyp wird denn für das Feld in der Datenbank verwendet? Und welcher Dialekt (1 od. 3)?
|
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. |
AW: IBSql vs. IBQuery
Generell hat man bei Dialect 1 und der Verwendung von FLOAT, DOUBLE es immer mit Rundungsproblemen zu tun.
|
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.
|
AW: IBSql vs. IBQuery
Hallo,
Zitat:
Wie heist der Typ genau ? Heiko |
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. |
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 |
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.
|
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