Russian Qt Forum

Qt => Базы данных => Тема начата: Alchazar от Ноябрь 23, 2009, 15:34



Название: Запрос в БД не возвращает первую запись из БД
Отправлено: Alchazar от Ноябрь 23, 2009, 15:34
Делаю запрос, вроде всё правильно:
Код
C++ (Qt)
query_pc.exec("SELECT pc_name, pc_group, pc_comment FROM pc WHERE pc_group = '" + gr_id + "'");
       record_pc = query_pc.record();
       query_pc.first();
 
       while (query_pc.next())
       {
 
Вот только он не реагирует на первую запись полученую (или её даже не получает?) из бд. Если ответ содержит две или более записей, то выводит все записи кроме первой, если есть только одна запись, то ответа никакого нету. lastError пустой, запрос вроде правильный (проверял в бд).

Код
C++ (Qt)
QString gr_name, gr_id;
   QSqlQuery query, query_pc;
   QSqlRecord record, record_pc;
 
   query.exec("SELECT group_id, group_name FROM groups ORDER BY group_name DESC");
   record = query.record();
   query.first();
 
   while (query.next())
   {
       gr_name = query.value(record.indexOf("group_name")).toString();
       gr_id = query.value(record.indexOf("group_id")).toString();
 
       QTreeWidgetItem *item = new QTreeWidgetItem(FMain::trWd_tree);
       item->insertChild(0,item);
       item->setText(0, gr_name);
 
       query_pc.exec("SELECT pc_name, pc_group, pc_comment FROM pc WHERE pc_group = '" + gr_id + "'");
       record_pc = query_pc.record();
       query_pc.first();
 
       while (query_pc.next())
       {
           QString pcName = query_pc.value(record_pc.indexOf("pc_name")).toString();
           QString pcComment = query_pc.value(record_pc.indexOf("pc_comment")).toString();
           QTreeWidgetItem *subItem = new QTreeWidgetItem(item);
           subItem->insertChild(0, item);
           subItem->setText(0, pcName);
           subItem->setText(1, pcComment);
       }
   }
 

Первый запрос выполняется без проблем, почему второй запрос не принимает первую запись?


Название: Re: Запрос в БД не возвращает первую запись из БД
Отправлено: kirill от Ноябрь 23, 2009, 15:48
Мнэээ.. а логика?
        query_pc.first(); - перейти к первому результату
        while (query_pc.next()) - перейти к следующему результату
естессно первый ты не обрабатываеш

Это шутка?


Название: Re: Запрос в БД не возвращает первую запись из БД
Отправлено: break от Ноябрь 23, 2009, 15:50
Код:
        query_pc.first();
 
        while (query_pc.next())

Сначала ставите указатель на первую запись, и сразу же ставите на вторую - вот первая и пролетает мимо - в вашем случае просто уберите first()


Название: Re: Запрос в БД не возвращает первую запись из БД
Отправлено: Alchazar от Ноябрь 23, 2009, 15:52
Понятно, но тогда почему в первом запросе всё нормально показывает?