Russian Qt Forum
Ноябрь 23, 2024, 18:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT + ODBC. Возвращаемые значения ХП. Это даже и не глюки...  (Прочитано 3859 раз)
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.
Может кто сталкивался уже...

Записан
crossly
Гость
« Ответ #1 : Ноябрь 29, 2007, 20:53 »

попробуй перед взятием значения query.next()....
Записан
Voffkaa
Гость
« Ответ #2 : Октябрь 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...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.