Russian Qt Forum

Qt => Базы данных => Тема начата: span от Ноябрь 28, 2007, 19:24



Название: QT + ODBC. Возвращаемые значения ХП. Это даже и не глюки...
Отправлено: span от Ноябрь 28, 2007, 19:24
Доброго дня всем.

Есть приложение, работает с базой (MS SQL 2005) через QSqlDatabase.

С простым SQL все отлично. Таблицы просматриваются, обновляются, и.т.д.

Есть процедура на Transact SQL. Имеет пару входных значений и пару выходных
Код:
ALTER PROCEDURE [dbo].[GetEndTime]
@TermName VARCHAR(30),
@Ccy INT,
@EndDate DATETIME OUTPUT,
@Message  VARCHAR(255) OUTPUT

С входными параметрами все отлично, а вот с выходными - беда.
Пытаюсь забиндить значение Message к запросу как QSql::InOut (просто QSql::Out не работает вообще)

Код:
query.prepare("execute GetEndTime :termname, :ccy, :enddate, :mes");
// ...
query.bindValue(":mes", "", QSql::InOut);
query.exec();

QString s = query.boundValue(":mes").toString();

Теперь в s пустая строка, хотя ХП возвращает значение.

если сделать так:
Код:
query.bindValue(":mes", QVariant(QVariant::String), QSql::InOut);
результат тот же.

А теперь внимание! Если сделать так:
Код:
query.bindValue(":mes", "string len = 15", QSql::InOut);
то после exec(); получаю обрубок из строки, длиною 14 символов.

Что делать? как правильно биндить переменные OUTPUT.
Может кто сталкивался уже...



Название: Re: QT + ODBC. Возвращаемые значения ХП. Это даже и не глюки...
Отправлено: crossly от Ноябрь 29, 2007, 20:53
попробуй перед взятием значения query.next()....


Название: Re: QT + ODBC. Возвращаемые значения ХП. Это даже и не глюки...
Отправлено: Voffkaa от Октябрь 16, 2008, 00:05
Столкнулся с такой же проблемой.

Решение получилось такое:

   q.prepare("{CALL GetFullAddress(?,?)}");
   q.bindValue(0,unid);
   q.bindValue(1,"iurgieurieruvhieurvbieur viuer iuhrivhihrvfirfier ifeu hrif heri hfeirhf eiur ieurhf eiurfh ieurf ei",QSql::InOut);

Дальше по мурзилке...

Короче, сдается, что ему надо передать что-то вроде буфера, в котором изначальная строка заместится ответом.
Создаем буфер, передаем функции, она его заполняет... Возвращение к давно забытым техникам... Совсем не Qt-style...