diff options
| author | Christian Ehrlicher <[email protected]> | 2024-06-23 12:58:40 +0200 |
|---|---|---|
| committer | Christian Ehrlicher <[email protected]> | 2024-07-04 23:00:00 +0200 |
| commit | 730de6fbb09f082f32dfa355502551a0d6b8ae34 (patch) | |
| tree | f13ed30482545497a303ad0076dcae0841cbc143 /src/plugins/sqldrivers/odbc/qsql_odbc.cpp | |
| parent | 793f3d8642139e9411ee0ec7999d8d8273b22241 (diff) | |
SQL/ODBC: properly set SQL_ATTR_CURSOR_SCROLLABLE
Setting a query in forward-only or scrollable mode was done with
SQL_ATTR_CURSOR_TYPE in ODBCv2. Nearly all ODBCv3 drivers also honor
this value but some don't and need the ODBC v3 conformant
SQL_ATTR_CURSOR_SCROLLABLE attribute instead. Fix it by setting both
attributes.
Fixes: QTBUG-126118
Pick-to: 6.8 6.7 6.5
Change-Id: I6d974b7b3e94113b0a87f1cc7f8cff0deb53642b
Reviewed-by: Axel Spoerl <[email protected]>
Diffstat (limited to 'src/plugins/sqldrivers/odbc/qsql_odbc.cpp')
| -rw-r--r-- | src/plugins/sqldrivers/odbc/qsql_odbc.cpp | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index 77137f3b3c3..d266cd98086 100644 --- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -964,22 +964,22 @@ bool QODBCResult::reset (const QString& query) d->updateStmtHandleState(); - if (isForwardOnly()) { - r = SQLSetStmtAttr(d->hStmt, - SQL_ATTR_CURSOR_TYPE, - (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY, - SQL_IS_UINTEGER); - } else { - r = SQLSetStmtAttr(d->hStmt, - SQL_ATTR_CURSOR_TYPE, - (SQLPOINTER)SQL_CURSOR_STATIC, - SQL_IS_UINTEGER); - } + // ODBCv3 version of setting a forward-only query + uint64_t sqlStmtVal = isForwardOnly() ? SQL_NONSCROLLABLE : SQL_SCROLLABLE; + r = SQLSetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER(sqlStmtVal), SQL_IS_UINTEGER); if (!SQL_SUCCEEDED(r)) { - setLastError(qMakeError(QCoreApplication::translate("QODBCResult", - "QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. " - "Please check your ODBC driver configuration"), QSqlError::StatementError, d)); - return false; + // ODBCv2 version of setting a forward-only query + sqlStmtVal = isForwardOnly() ? SQL_CURSOR_FORWARD_ONLY : SQL_CURSOR_STATIC; + r = SQLSetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_TYPE, SQLPOINTER(sqlStmtVal), SQL_IS_UINTEGER); + if (!SQL_SUCCEEDED(r)) { + setLastError(qMakeError( + QCoreApplication::translate("QODBCResult", + "QODBCResult::reset: Unable to set 'SQL_ATTR_CURSOR_TYPE' " + "as statement attribute. " + "Please check your ODBC driver configuration"), + QSqlError::StatementError, d)); + return false; + } } { |
