crossplatform.ru

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


  Ответ в биндинг полей в QSqlQuery
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
lanz Дата 21.5.2013, 11:29
  Выглядит вроде впорядке, прикладываю минимальный проект, посмотрите может какую нибудь мелочь забыли.

EDIT: ой вей, прошу прощения за гробокопательство, не посмотрел дату.
Гость Дата 21.5.2013, 8:53
 
QSqlQuery *pQuery = new QSqlQuery(...);
pQuery->prepare(
               "INSERT INTO table(id, text) "
               "VALUES (:id, :text);"
               );
pQuery->bindValue(":id", 123);
pQuery->bindValue(":text", "text");
pQuery->exec();


Andrewshkovskii Дата 9.12.2010, 2:09
  Бред какой-то.
Вот теперь запрос выглядит так :
insert into PARAMETER_SOURCE VALUES(%1,'%2','%3');

В коде :
       query->prepare(qq.value(0).arg("1").arg("blahblah").arg("BLAAA"));
       query->exec();
       qDebug() << qq.value(0);
       qDebug() << query->executedQuery();
       qDebug() << query->lastError();

Результат :
"insert into PARAMETER_SOURCE VALUES(%1,'%2','%3');" 
"insert into PARAMETER_SOURCE VALUES(1,'blahblah','BLAAA');"
QSqlError(-1, "Unable to fetch row", "No query")

Вот теперь точно ничего не понимаю. такой же запрос отрабатывается через админку для sqlite, а из кода не хочет. Не понимать. База 100% открывается, очередь к базе подключается...
Andrewshkovskii Дата 8.12.2010, 23:12
  Вообще да, запрос логически не верен, первой поле числовое (это первичный ключ), с автоинкриментом.
Но дело в том, что такой запрос 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 использовать..
Litkevich Yuriy Дата 8.12.2010, 20:37
 
Цитата(Andrewshkovskii @ 8.12.2010, 20:48) *
Разве sqlite не поддерживает биндинги?
это не важно, если СУБД их не поддерживает, драйвер Qt будет сам их имитировать

не соображу почему он так ругается.

Если я правильно понимаю, что там за таблица, т.е. первое поле - числовое. То ругаться должен на
QString("null")

т.е. не соответствие типов
Andrewshkovskii Дата 8.12.2010, 20:18
 
"insert into PARAMETER_SOURCE (id_unit, name, definition) VALUES (:id_unit, :name, :definition);"

Т.е. точно так же, как и написан запрос в внешнем файле.
Litkevich Yuriy Дата 8.12.2010, 20:17
 
Цитата(Andrewshkovskii @ 8.12.2010, 20:48) *
query->prepare(qq.value(0));
что возвращает qq.value(0)?
приведи само значение
Andrewshkovskii Дата 8.12.2010, 18:48
  Есть простая табличка 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 не поддерживает биндинги? Или я делаю что-то не так?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 3:34