summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers/odbc
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-04-12 22:26:08 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-17 23:16:51 +0200
commitf869a12c1043271b2ce8987b07a863ba3c78d6c9 (patch)
tree7248ea09b3ab68372c1071f6b1cc1a1ccdb40ac9 /src/sql/drivers/odbc
parent84e782e2bd93f97bd1f4f46853462e794ce374b2 (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')
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp11
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;
}