summaryrefslogtreecommitdiffstats
path: root/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
diff options
context:
space:
mode:
authorChristian Ehrlicher <[email protected]>2024-06-23 12:58:40 +0200
committerChristian Ehrlicher <[email protected]>2024-07-04 23:00:00 +0200
commit730de6fbb09f082f32dfa355502551a0d6b8ae34 (patch)
treef13ed30482545497a303ad0076dcae0841cbc143 /src/plugins/sqldrivers/odbc/qsql_odbc.cpp
parent793f3d8642139e9411ee0ec7999d8d8273b22241 (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.cpp30
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;
+ }
}
{