При вызове хранимой процедуры MySQL с предварительным использованием QSqlQuery::prepare() не удается получить возвращаемый ей набор данных.
Код хранимой процедуры:
CREATE PROCEDURE test(prm int)
BEGIN
select prm from dual;
end
Код программы:
#include <QtSql>
int main(int argc, char *argv[])
{
QSqlDatabase db;
db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("test");
db.setPassword("test");
if(!db.open()) qDebug() << db.lastError();
QSqlQuery query;
// 1-й вариант:
if(!query.prepare("call test(:prm)")) qDebug() << query.lastError();
query.bindValue(":prm",999);
if(!query.exec()) qDebug() << query.lastError();
/* // 2-й вариант:
if(!query.exec("call test(999)")) qDebug() << query.lastError();
*/
qDebug() << "size:" << query.size();
while(query.next()) qDebug() << query.value(0);
db.close();
}
При запуске в 1-м варианте набор данных пуст: query.size() возвращает "-1", query.next() - false. При этом сама процедура вызывается, проверено.
При запуске во 2-м варианте, где тот же самый запрос выполняется с явной передачей значения параметра в exec, query.size() возвращает 1, query.next() - true, результат выводится.
Вопрос - можно ли и каким образом обработать набор данных, возвращаемый процедурой, при использовании связывания параметров?
Поиск особых результатов не дал, кроме, разве что
http://lists.trolltech.com/pipermail/qt-interest/2008-December/000190.html, там решения нет.
mysql Ver 14.14 Distrib 5.1.39, for redhat-linux-gnu (i386) using readline 5.1
qt 4.6.2