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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: После обновления Qt 4.7 не выполняется запрос sqlite  (Прочитано 6722 раз)
sergun1604
Гость
« : Июнь 06, 2011, 09:33 »

Отцы давно не писал но опять к вам!
Проблема: Обновил Kubuntu до 11.04 с ней Qt
откомпилил приложение
перенес на ubuntu 10.04 (где оно раньше стояло)
пошли баги (при открытии некоторых окон прога вылетала)
скопировал с kubuntu на ubuntu либы кутешные и стал их использовать
Все завелось
Но теперь один единственный запрос на внесение записей не срабатывает. Хотя остальные идут норм.
На компе где креатор все компилится и обрабатывается классно без ошибок но вот на компе с убунтой не идет этот запрос.
Хотя в проге 4 подобных запроса и они норм обрабатываются.
вот запрос
Код:
QSqlQuery query5;
QString strF ="INSERT INTO tov (name, price, groop, margin, ed, koef, nds, pod, pricer) " "VALUES('%1', '%2', %3, '%4', '%5', '%6', %7, %8, '%9');";        //строка значений имя цена группа
QString str = strF.arg(name).arg(price).arg(groop).arg(margin).arg(ed).arg(koef).arg(nds).arg(pod).arg(pricer);
query5.exec(str);

хотя обновление работает
Код:
QString strF ="UPDATE tov SET name='%1', price='%2', groop=%3, margin='%4', ed= '%5', koef='%6', nds=%7, pod=%8, pricer='%9' " "WHERE id= %10";        //строка значений имя цена группа
        QString str = strF.arg(name).arg(price).arg(groop).arg(margin).arg(ed).arg(koef).arg(nds).arg(pod).arg(pricer).arg(n);

Измучился уже помогите кто может
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 06, 2011, 09:47 »

Ну вы бы привели код и текст ошибки, с которой запрос невыполняется.
Да и вообще неправильно так составлять запросы, надо через QSqlQuery::prepare и QSqlQuery::bindValue.
Записан
sergun1604
Гость
« Ответ #2 : Июнь 06, 2011, 10:10 »

Во спасибо за направления.
В том то и дело что как посмотреть ошибку.
На компе на котором компилю все норм
а на том на которое приложение приношу как посмотришь?
через терминал запускал никаких ошибок не выдает

Попробую препаре и бинд валуе отпишусь
« Последнее редактирование: Июнь 06, 2011, 10:16 от sergun1604 » Записан
sergun1604
Гость
« Ответ #3 : Июнь 06, 2011, 10:36 »

что то не так делаю?
Код:
query5.prepare("INSERT INTO tov (name)" "VALUES (:name)");
        query5.bindValue(":name",name);
query5.exec();

Запрос не проходит хелп
« Последнее редактирование: Июнь 06, 2011, 10:38 от sergun1604 » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Июнь 06, 2011, 10:46 »

а на том на которое приложение приношу как посмотришь?
Так вы выводите ошибку, если она произошла.
Код
C++ (Qt)
if ( query5.exec() )
{
   делаем что надо
}
else
{
   QMessageBox::critical( this, QString::number( (quint32) query5.lastError().type() ), query5.lastError().text() );
}
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Июнь 06, 2011, 11:21 »

Попробуй
query5.prepare("INSERT INTO tov (name) VALUES (:name)");
query5.bindValue(":name",name);
вместо
query5.prepare("INSERT INTO tov (name)" "VALUES (:name)");
query5.bindValue(":name",name1);

Ведь name - имя поля
name1 значение
Записан
Denjs
Гость
« Ответ #6 : Июнь 06, 2011, 16:25 »

мне кажется в последнем листинге суть дела в разделителе. имхо надо
Код:
query5.prepare("INSERT INTO tov (name)" "VALUES (:name);");
вместо
Код:
query5.prepare("INSERT INTO tov (name)" "VALUES (:name)");

потому что где-то я уже такое отгребал с склайтом - что без разделителя - он думает что запрос ещё не закончен.
И проблема ваша мне кажется не в том что обновился Qt а в том, что SQLite обновился...

PS: а вот кстати к слову некоторые iSeries-ные версии DB2 как раз не хотят видеть разделитель... у каждого свои тараканы))))

ЗЗЫ: хотя вот в пером вашем листинге ";" вроде как присутсвует....
кстати - в почему у вас в середине строки зачем-то кавычки-пробел-кавычкистоят?
Код:
pod, pricer) " "VALUES('%1'
я просто не понимаю что это, простите...

ЗЗЫ: Ещё добавлю, что имена колонок лучше всего заключать в кавычки которые я именую "кавычки для имен столбцов".
для MySQL - это ` ("обратная одинарная кавычка" кажется). Для SQLite - это "  ("двойная простая кавычка" кажется)
Строковые значения - в кавычки для строк. для MySQL и SQLite - это ' ("простая одинарная кавычка" кажется).
Вы точно знаете/проверяли что name в новых версиях SQLite - это нифига не зарезервированное слово?

потому совсем правильно имхо будет даже
Код:
query5.prepare("INSERT INTO tov (\"name\") VALUES (':name');");


вот такое моё скромное имхо...
« Последнее редактирование: Июнь 06, 2011, 16:42 от Denjs » Записан
sergun1604
Гость
« Ответ #7 : Июнь 07, 2011, 09:07 »

ребята спасибо вам но
код на проверку ошибки ни чего не выдает на убунтовском компе мол запрос выполнен
пробывал сейчас применять препаре
теперь еще смешнее
такой код
Код:
query5.prepare("INSERT INTO tov (name) VALUES (:name);");
query5.bindValue(":name",name);
if ( query5.exec() )
    {

    }
    else
    {
        QMessageBox::critical( this, QString::number( (quint32) query5.lastError().type() ), query5.lastError().text() );
    }
проходит без ошибок но не делает запись в базу теперь даже на компьюте где компилю приложение

если в ковычки ставить
Код:
query5.prepare("INSERT INTO tov (name) VALUES (':name');");
то пишет "Parameter count mismatch"
Я в тупике
Записан
sergun1604
Гость
« Ответ #8 : Июнь 07, 2011, 09:52 »

так ну сейчас заработал с препаре проблема была в том что обязательно надо указывать все поля
буду эксперементить на компе с убунтой теперь
Записан
sergun1604
Гость
« Ответ #9 : Июнь 07, 2011, 13:38 »

Все спасибо всем оказывается проблема была не в бобине.
Почему то на том компе не выполнялся кусок кода
в операторе if
было написано
if(m==1)
{
выполняется
}
else
{
невыполняется
}

написал заместо else
if(m==0)

глупость конечно но как этот баг отследишь. (жаль потраченного времени)

зато узнал про prepare
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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