1

我尝试从 Microsoft SQLServer 数据库中选择 numeric(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不起作用,因为它似乎以 double 值开始转换。

关于主题:我确定问题出在QT. 当我在 Java 应用程序中使用相同的 ODBC-Driver 时,我得到了正确的值。

4

1 回答 1

1

嗨,我发现了一个错误报告https://bugreports.qt-project.org/browse/QTBUG-10451

解决方案是将 numericPrecisionPolicy 从 LowPrecisionDouble 设置为 HighPrecision 以下代码行是添加,然后 qVariant 是 qString 并且一切正常

db.setNumericalPrecisionPolicy(QSql::HighPrecision);
于 2012-08-24T09:15:19.173 回答