我尝试从Microsoft SQLServer数据库中选择数字(20,0)值。 因此,我通过ODBC连接到Microsoft SQL Server。我使用SQLServer Native Client 10.0驱动程序。
我在QT项目中连接和选择数据的方式如下:
db = QSqlDatabase::addDatabase("QODBC", "DBConnection");
db.open();
query.exec("SELECT * FROM TABLE")
while (query.next()) {
//Do something with query.value(0)
}
现在的问题是,当我查看从QVariant
返回的query.value()
时,我发现它是双重的。但是双值仅适用于大约16位而不是20位。例如,在选择中,值应该是10903012224000000001但是我得到10903012224000000000。
有没有办法告诉QT它应该返回哪种类型的值? 精确的字符串值就足够了。
query.value(0).toXXX
无效的方式,因为它似乎以双值开始转换。
关于主题:
我确定问题出在QT
。当我在Java应用程序中使用相同的ODBC驱动程序时,我得到了正确的值。
答案 0 :(得分:1)
您好我发现了一个错误报告https://bugreports.qt-project.org/browse/QTBUG-10451
解决方案是将NumericalPrecisionPolicy从LowPrecisionDouble设置为HighPrecision 下面的代码行是添加,然后qVariant是qString,一切正常
db.setNumericalPrecisionPolicy(QSql::HighPrecision);