diff options
author | Mark Brand <mabrand@mabrand.nl> | 2012-04-12 22:26:08 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-17 23:16:51 +0200 |
commit | f869a12c1043271b2ce8987b07a863ba3c78d6c9 (patch) | |
tree | 7248ea09b3ab68372c1071f6b1cc1a1ccdb40ac9 /src/sql/drivers/odbc/qsql_odbc.cpp | |
parent | 84e782e2bd93f97bd1f4f46853462e794ce374b2 (diff) |
QTBUG-18435 fix stored procedure output parameters on ODBC
Follow-up to c55a99965d8c08d5f924d49db4fe4aa49df8096.
3 problems prevented stored procedure output parameters from working.
- SQLBindParameter needs access to buffer provided by QByteArray.
- The length of the buffer is measured in bytes.
- A typo corrupted conversion back to QString.
Also, data() makes more sense than constData() to expose the buffer.
Task-Id: QTBUG-18435
Change-Id: I66444b13c0f584ed79bcf026e5a23caff83c22cb
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/drivers/odbc/qsql_odbc.cpp')
-rw-r--r-- | src/sql/drivers/odbc/qsql_odbc.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 70471d0c66..9b1b7fa2ba 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -1502,8 +1502,9 @@ bool QODBCResult::exec() int strSize = str.length() * sizeof(SQLTCHAR); if (bindValueType(i) & QSql::Out) { - QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str)); - ba.reserve(str.capacity()); + QVarLengthArray<SQLTCHAR> a(toSQLTCHAR(str)); + a.reserve(str.capacity()); + QByteArray ba((const char *)a.constData(), a.size() * sizeof(SQLTCHAR)); r = SQLBindParameter(d->hStmt, i + 1, qParamType[(QFlag)(bindValueType(i)) & QSql::InOut], @@ -1511,10 +1512,10 @@ bool QODBCResult::exec() strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR, 0, // god knows... don't change this! 0, - (void *)ba.constData(), + (void *)ba.data(), ba.size(), ind); - tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR))); + tmpStorage.append(ba); break; } QByteArray strba((const char *)toSQLTCHAR(str).constData(), str.size()*sizeof(SQLTCHAR)); @@ -1638,7 +1639,7 @@ bool QODBCResult::exec() QByteArray first = tmpStorage.takeFirst(); QVarLengthArray<SQLTCHAR> array; array.append((SQLTCHAR *)first.constData(), first.size()); - values[i] = fromSQLTCHAR(array, first.size()/sizeof(SQLTCHAR*)); + values[i] = fromSQLTCHAR(array, first.size()/sizeof(SQLTCHAR)); } break; } |