Russian Qt Forum

Qt => Базы данных => Тема начата: akaMDA от Март 13, 2013, 09:49



Название: Биндинг переменных в Oracle
Отправлено: akaMDA от Март 13, 2013, 09:49
SQL запрос
Код:
INSERT INTO A(str) VALUES (:ba) RETURNING A_ID INTO :bId

добавляю бинды

Код:
bindValue(":ba", "AAAAAAAAAAA");
addBindValue(QVariant(QVariant::ULongLong, QSql::Out);

При exec() ошибка - невозможно вставить NULL в str. Если использовать только 1 переменную (:ba или :bId), то все работает. Что я не так делаю?


Название: Re: Биндинг переменных в Oracle
Отправлено: dio от Март 13, 2013, 10:57
Попробуйте так:

Код:
bindValue(":ba", "AAAAAAAAAAA");
bindValue(":bId", QVariant(QVariant::ULongLong),QSql::Out);


Название: Re: Биндинг переменных в Oracle
Отправлено: akaMDA от Март 13, 2013, 11:28
Пробовал. Но в результате в :bId оказывается всегда 2, а не настоящий id. Сейчас вышел из положения 2 запросами INSERT и UPDATE.


Название: Re: Биндинг переменных в Oracle
Отправлено: dio от Март 13, 2013, 14:19
Очень странно. Должно работать правильно.
У Вас значение A_ID формируется триггером? Приведите его код.
Ну и на всякий случай какая у Вас версия Qt? У меня 4.7.4. Win. Данный код работает.


Название: Re: Биндинг переменных в Oracle
Отправлено: akaMDA от Март 14, 2013, 13:42
Значение формитуертся триггером, проблем не возникает. Qt 5.0.1


Название: Re: Биндинг переменных в Oracle
Отправлено: twp от Март 15, 2013, 00:24
Пробовал. Но в результате в :bId оказывается всегда 2, а не настоящий id. Сейчас вышел из положения 2 запросами INSERT и UPDATE.

Цитата: Assistant
QVariant::QVariant ( Type type )
Constructs a null variant of type type.

2 как раз равно QVariant::ULongLong
т.е. такой код QVariant(QVariant::ULongLong)
создает пустое значение но с типом qlonglong.
А вот если сделать так, что будет?
Код
C++ (Qt)
qlonglong outValue;
bindValue(":bId", outValue, QSql::Out);