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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос в БД не возвращает первую запись из БД  (Прочитано 3333 раз)
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);
       }
   }
 

Первый запрос выполняется без проблем, почему второй запрос не принимает первую запись?
Записан
kirill
Гость
« Ответ #1 : Ноябрь 23, 2009, 15:48 »

Мнэээ.. а логика?
        query_pc.first(); - перейти к первому результату
        while (query_pc.next()) - перейти к следующему результату
естессно первый ты не обрабатываеш

Это шутка?
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Ноябрь 23, 2009, 15:50 »

Код:
        query_pc.first();
 
        while (query_pc.next())

Сначала ставите указатель на первую запись, и сразу же ставите на вторую - вот первая и пролетает мимо - в вашем случае просто уберите first()
Записан
Alchazar
Гость
« Ответ #3 : Ноябрь 23, 2009, 15:52 »

Понятно, но тогда почему в первом запросе всё нормально показывает?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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