我尝试从微软的SQLServer数据库中选择数值(20,0)。因此,我通过ODBC连接到Microsoft SQL Server。我使用SQLServer Native Client 10.0驱动程序。
我在QT-project中连接和选择数据的方式如下:
db = QSqlDatabase::addDatabase("QODBC", "DBConnection");
db.open();
query.exec("SELECT * FROM TABLE")
while (query.next()) {
//Do something with query.value(0)
}现在的问题是,当我查看从query.value()返回的是哪种类型的QVariant时,我发现它是一个双精度型。但是双精度值只适用于大约16位数,而不适用于20位数。例如,在select中,值应该是10903012224000000001,但我得到了10903012224000000000。
有没有办法告诉QT它应该返回哪种类型的值?一个精确的字符串值就足够了。
query.value(0).toXXX的方式不起作用,因为它似乎以双精度值开始转换。
关于主题:我确信问题出在QT上。当我在Java应用程序中使用相同的ODBC驱动程序时,我得到了正确的值。
发布于 2012-08-24 17:15:19
嗨,我发现了一个bugreport https://bugreports.qt-project.org/browse/QTBUG-10451
解决方案是将numericalPrecisionPolicy从LowPrecisionDouble设置为HighPrecision,添加以下代码行,然后将qVariant设置为qString,一切工作正常
db.setNumericalPrecisionPolicy(QSql::HighPrecision);https://stackoverflow.com/questions/12089303
复制相似问题