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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery не понятна ситуация  (Прочитано 5209 раз)
BuRn
Гость
« : Октябрь 18, 2011, 17:56 »

Цитировать
QSqlQuery query1("select * from orders where is_accepted=0 and is_cheked=0");
    query1.exec();
    QString name;
    while(query1.next())
    {
        int id=query1.value(0).toInt();
        name=query1.value(3).toString();
        QSqlQuery query2("update orders set is_cheked=1 where id=:id");
        query2.bindValue(":id",id);
        query2.exec();
        NewOrder *order = new NewOrder;
        qDebug()<<id;
        order->SetIDOrder(id);
        ui->tabWidget_2->addTab(order,name);
    }
запись в базе с флагами is_accepted и is_cheked единственная, но почему-то цикл while(query1.next()) крутится 2 раза да и в первый раз в переменной id мусор
Записан
Yuriy
Гость
« Ответ #1 : Октябрь 18, 2011, 19:43 »

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

Код:
select * from orders where is_accepted='0' and is_cheked='0';
Записан
Yuriy
Гость
« Ответ #2 : Октябрь 18, 2011, 19:52 »

И еще для читаемости кода лучше ключевые слова SQL писать заглавными буквами:
Код:
const QStrign strF= "SELECT * FROM orders WHERE is_accepted='%1' AND is_cheked='%2';";
const QString str = strF.arg(0).arg(0);

if (!query1.exec(str))
....

а то так с ходу и не разберешь что и куда SELECT, а потом забросы бывают не в одну и даже не в 10 строк и вот тогда точно копец.
Записан
BuRn
Гость
« Ответ #3 : Октябрь 18, 2011, 22:59 »

и вот интересует сразу, а возможно ли биндить таблицы, что-то мне это не удалось
Записан
Yuriy
Гость
« Ответ #4 : Октябрь 18, 2011, 23:09 »

Нужно описывать движок со своими делегатами.
У меня ушло на это приблизительно пол года, только это не API получилось, а самопальный движок с функционалом MS Access только я в нем могу описывать программы, а так черт ногу сломит. А вообще можно посмотреть готовые движки, есть же в инете всякие SQLite редакторы, основанные на Qt библиотеках.
Записан
RVZ
Гость
« Ответ #5 : Октябрь 28, 2011, 14:07 »

Код
C++ (Qt)
const QStrign strF = QString("SELECT * FROM orders WHERE is_accepted=%1 AND is_cheked=%2;").arg(0).arg(0);

СОВСЕМ БРЕД КАКОЙТО!!!!!
Цитировать
QSqlQuery query1("select * from orders where is_accepted=0 and is_cheked=0");
    query1.exec();
    QString name;
    while(query1.next())
    {
        int id=query1.value(0).toInt();
        name=query1.value(3).toString();
        QSqlQuery query2("update orders set is_cheked=1 where id=:id");
        query2.bindValue(":id",id);
        query2.exec();
        NewOrder *order = new NewOrder;
        qDebug()<<id;
        order->SetIDOrder(id);
        ui->tabWidget_2->addTab(order,name);
    }
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 28, 2011, 14:09 »

QSqlQuery query2("update orders set is_cheked=1 where id=:id");
замени на
QSqlQuery query2;
query2.prepare ("update orders set is_cheked=1 where id=:id");
И вынеси это из цикла.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #7 : Октябрь 30, 2011, 01:27 »

Не по теме, просто замечание.
У тебя запрос два раза выполняется.

"If query is not an empty string, it will be executed."
QSqlQuery

UPD: В общем-то об этом Пантер и сказал)
« Последнее редактирование: Октябрь 30, 2011, 01:29 от andrew.k » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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