diff options
Diffstat (limited to 'src/plugins/sqldrivers')
-rw-r--r-- | src/plugins/sqldrivers/odbc/qsql_odbc.cpp | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index dd6eaab9cf..026a970cf0 100644 --- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -347,12 +347,16 @@ static QMetaType qDecodeODBCType(SQLSMALLINT sqltype, bool isSigned = true) switch (sqltype) { case SQL_DECIMAL: case SQL_NUMERIC: - case SQL_REAL: - case SQL_FLOAT: - case SQL_DOUBLE: + case SQL_FLOAT: // 24 or 53 bits precision + case SQL_DOUBLE:// 53 bits type = QMetaType::Double; break; + case SQL_REAL: // 24 bits + type = QMetaType::Float; + break; case SQL_SMALLINT: + type = isSigned ? QMetaType::Short : QMetaType::UShort; + break; case SQL_INTEGER: case SQL_BIT: type = isSigned ? QMetaType::Int : QMetaType::UInt; @@ -1220,9 +1224,11 @@ QVariant QODBCResult::data(int field) d->fieldCache[i] = qGetBigIntData(d->hStmt, i, false); break; case QMetaType::Int: + case QMetaType::Short: d->fieldCache[i] = qGetIntData(d->hStmt, i); - break; + break; case QMetaType::UInt: + case QMetaType::UShort: d->fieldCache[i] = qGetIntData(d->hStmt, i, false); break; case QMetaType::QDate: @@ -1513,6 +1519,30 @@ bool QODBCResult::exec() 0, *ind == SQL_NULL_DATA ? ind : NULL); break; + case QMetaType::Short: + r = SQLBindParameter(d->hStmt, + i + 1, + qParamType[bindValueType(i) & QSql::InOut], + SQL_C_SSHORT, + SQL_SMALLINT, + 0, + 0, + const_cast<void *>(val.constData()), + 0, + *ind == SQL_NULL_DATA ? ind : NULL); + break; + case QMetaType::UShort: + r = SQLBindParameter(d->hStmt, + i + 1, + qParamType[bindValueType(i) & QSql::InOut], + SQL_C_USHORT, + SQL_NUMERIC, + 15, + 0, + const_cast<void *>(val.constData()), + 0, + *ind == SQL_NULL_DATA ? ind : NULL); + break; case QMetaType::Double: r = SQLBindParameter(d->hStmt, i + 1, @@ -1525,6 +1555,18 @@ bool QODBCResult::exec() 0, *ind == SQL_NULL_DATA ? ind : NULL); break; + case QMetaType::Float: + r = SQLBindParameter(d->hStmt, + i + 1, + qParamType[bindValueType(i) & QSql::InOut], + SQL_C_FLOAT, + SQL_REAL, + 0, + 0, + const_cast<void *>(val.constData()), + 0, + *ind == SQL_NULL_DATA ? ind : NULL); + break; case QMetaType::LongLong: r = SQLBindParameter(d->hStmt, i + 1, @@ -1705,8 +1747,11 @@ bool QODBCResult::exec() QTime(dt.hour, dt.minute, dt.second, dt.fraction / 1000000))); break; } case QMetaType::Bool: + case QMetaType::Short: + case QMetaType::UShort: case QMetaType::Int: case QMetaType::UInt: + case QMetaType::Float: case QMetaType::Double: case QMetaType::QByteArray: case QMetaType::LongLong: |