Seite 1 von 1

toInt() aus SQL-Datenbank bringt kein Ergebnis

Verfasst: 5. März 2009 13:41
von mucmonkey
Hallo Forum,

seit der Qt Version 4.4.3 habe ich ein merkwürdiges Verhalten gefunden.
Ich wollte meine bisher funktionierenden Projekte von der Qt Version 4.4.1 auf die 4.4.3 oder 4.5.0 updaten. Aber es gibt ein Problem:

Alle Gleitkomma-Zahlenwerte, die per odbc aus nem SQL-Server in eine QSqlQuery eingelesen werden und dann per toInt() konvertiert werden sollen, geben nur 0 zurück. Die Umwandlung schägt also fehl.
Konvertiert die SQL-Abfrage den Wert selber schon in Integer, dann funktioniert es.
Laut Qt ist der Rückgabewert ein String (z.B. "9000.0").

Is das ein Fehler im Odbc, QString oder sonstiger Komponente oder wird nun strikter auf die Datentypen geachtet?

Verfasst: 5. März 2009 14:09
von Christian81
9000.0 ist aber kein Int.

Verfasst: 5. März 2009 14:19
von pfid
Christian81 hat geschrieben:9000.0 ist aber kein Int.
Ja und?

Verfasst: 5. März 2009 14:21
von macman
Das heißt ein String muss einen Int enthalten, damit Qt einen Int davon machen kann.

Verfasst: 5. März 2009 14:32
von pfid
Das würde bedeuten die Tabelle hat eine varchar Spalte statt decimal. Andernfalls sollte QVariant::toInt() funktionieren.

Verfasst: 5. März 2009 17:03
von mucmonkey
Dass "9000.5" kein Integer ist is mir klar. Aber das ist der Wert, den die QSqlQuery beinhaltet.

Die Datenbankspalte ist vom Typ "float".

Verfasst: 13. März 2009 17:23
von mucmonkey
Hat jemand eine idee oder dieselbe Erfahrung gemacht?

Verfasst: 13. März 2009 17:43
von Christian81
Tja... wenn es ein float ist würde ich einfach mal QString::toFloat() probieren... :roll:

Verfasst: 16. März 2009 13:45
von mucmonkey
Ich habs.. Keine Lösung aber zumindest den Grund :)

Für den Fehler gibt es bei qtsoftware im Task Traker bereits einen Fehler:
When using ODBC driver, type FLOAT (ODBC type SQL_C_DOUBLE) should become QVariant::Double.

With Qt 4.4.2, SQL_C_DOUBLE is QVariant::String.
Hier der Eintrag im Task Traker:
http://www.qtsoftware.com/developer/tas ... &id=228387