crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> биндинг полей в QSqlQuery, для sqlite
Andrewshkovskii
  опции профиля:
сообщение 8.12.2010, 18:48
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Есть простая табличка parameter_source (id_unit, name, definition). Пытаюсь через QSqlQuery вставить данные в неё :
       query->prepare(qq.value(0));
       query->bindValue(":id_unit",QString("null"));
       query->bindValue(":name",QString("name"));
       query->bindValue(":definition",QString("definition"));
       query->exec();
       qDebug() << query->boundValues();
       qDebug() << query->executedQuery();
       qDebug() << query->lastError();

Исходный запрос
insert into PARAMETER_SOURCE (id_unit, name, definition) VALUES (:id_unit, :name, :definition);

И на выходе получаю :
Цитата
QMap((":definition", QVariant(QString, "definition") ) ( ":id_unit" , QVariant(QString, "null") ) ( ":name" , QVariant(QString, "name") ) )
"insert into PARAMETER_SOURCE (id_unit, name, definition) VALUES (?, ?, ?);"
QSqlError(-1, "Parameter count mismatch", "")

Пробовал все 4 способо биндинга значение, все приводит к одному результату.
Разве sqlite не поддерживает биндинги? Или я делаю что-то не так?

Сообщение отредактировал Andrewshkovskii - 8.12.2010, 18:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Andrewshkovskii
  опции профиля:
сообщение 8.12.2010, 23:12
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Вообще да, запрос логически не верен, первой поле числовое (это первичный ключ), с автоинкриментом.
Но дело в том, что такой запрос sqlite отрабатывает нормально, без ошибок
insert into parameter_source values (null, 'aa','aaaa');


Видать qtшный драйвер шалит?
Попробовал сделать вот так вот :
       query->prepare(qq.value(0));
       query->bindValue(0,10);
       query->bindValue(1,QString("name"));
       query->bindValue(2,QString("definition"));
       query->exec();
       qDebug() << qq.value(0);
       qDebug() << query->boundValues();
       qDebug() << query->executedQuery();
       qDebug() << query->lastError();

А результат все тот же
"insert into PARAMETER_SOURCE (id_unit, name, definition) VALUES (:id_unit, :name, :definition);" 
QMap((":definition", QVariant(QString, "definition") ) ( ":f" ,  QVariant(int, 10) ) ( ":name" ,  QVariant(QString, "name") ) )  
"insert into PARAMETER_SOURCE (id_unit, name, definition) VALUES (?, ?, ?);"
QSqlError(-1, "Parameter count mismatch", "")


Видать придется QString.arg использовать..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 6:40