1

Microsoft SQLServerデータベースからnumeric(20,0)値を選択しようとしています。したがって、ODBCを介してMicrosoftSQLServerに接続します。SQLServer NativeClient10.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()かを見ると、ダブルであることがわかります。ただし、double値は、20桁ではなく、約16桁でのみ有効です。たとえば、selectでは、値は10903012224000000001である必要がありますが、10903012224000000000を取得します。

QTにどのタイプの値を返す必要があるかを伝える方法はありますか?正確な文字列値で十分です。

query.value(0).toXXXdouble値で変換を開始するように見えるため、この方法は機能しません。

トピックについて:問題はにあると確信していQTます。Javaアプリケーションで同じODBCドライバーを使用すると、正しい値が返されます。

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 に答える