Название: Количество записей в QSqlQuery Отправлено: onlik от Ноябрь 30, 2009, 00:57 Делаю
QSqlQuery query; query.exec("SELECT * FROM table"); query.size() возвращает мне -1 помогите понять почему? Запрос выполняется нормально, записи есть. Помогите, мучаюсь не могу понять что не так :( Название: Re: Количество записей в QSqlQuery Отправлено: Vlad от Ноябрь 30, 2009, 01:35 Что за база? Не все типы баз поддерживают query.size. Oracle не поддерживает. Я вот так считал:
int size = 0 ; while (query.next()) size++; Название: Re: Количество записей в QSqlQuery Отправлено: onlik от Ноябрь 30, 2009, 01:39 А...((((
Использую SQLITE, не поддерживается? Я тоже так делаю, но это лишняя операция, у меня многой записей в базе и данные часто обновляются, время очень важное :( Название: Re: Количество записей в QSqlQuery Отправлено: break от Ноябрь 30, 2009, 13:34 раз БД не поддерживает - делай отдельный запрос
select count(*) from SOME_TABLE --- и получай количество записей за быстрое время Название: Re: Количество записей в QSqlQuery Отправлено: MoPDoBoPoT от Ноябрь 30, 2009, 16:55 раз БД не поддерживает - делай отдельный запрос +1Только не забываем про транзакции. Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 11:29 Как передать значение COUNT() переменной? Что-то у меня qSize постоянно равен 0, хотя выполнив тот же запрос в базе получаю нормальное количество.
Код пробовал так - Код но всё равно qSize = 0 Название: Re: Количество записей в QSqlQuery Отправлено: Пантер от Декабрь 09, 2009, 12:36 Код Забыл. :) Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 13:06 Спасибо,
Уже второй раз на next'е попадаюсь, надеюсь теперь запомню) Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 13:45 Всё равно получаю 0,
перепробовал next, last, first, все возвращают 0 Код
Код: sqlite> select count(hd_pcid) from hardware_data where hd_pcid = '2'; Название: Re: Количество записей в QSqlQuery Отправлено: MoPDoBoPoT от Декабрь 09, 2009, 15:04 Во-первых, переменная pc_id, которая вставляется в запрос, имеет тип QString?
queryCount.value(recordCount.indexOf("hd_pcid")).toInt(); Во-вторых, в результирующей таблице поля с именем hd_pcid нет. Либо используй queryCount.value(0), либо писать в тексте запроса так: "SELECT COUNT(hd_pcid) AS 'cnt' FROM ...", а обращаться к полю так: recordCount.indexOf("cnt")Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 15:11 QString pc_id = FMain::trWd_tree->currentItem()->text(3);
Цитировать Во-вторых, в результирующей таблице поля с именем hd_pcid нет. Код Это я уже понял и исправил, но результат всё равен 0 Название: Re: Количество записей в QSqlQuery Отправлено: MoPDoBoPoT от Декабрь 09, 2009, 15:46 Не знаю, это опечатка или опять позабыт queryCount.next(); :)
Вообще можно еще проверки делать. Методы exec(), next() возвращают признак успеха, также есть метод lastError(). Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 15:58 На данный момент код выглядит так:
Код
Next я не забыл), просто не скопировал строчку) lastError() ошибок не показывает. lastQuery() показывает правильный запрос, скопировав его в sqlite получаю ответ. Уже не знаю что тут можно ещё найти, к чему прицепиться. Название: Re: Количество записей в QSqlQuery Отправлено: Пантер от Декабрь 09, 2009, 17:42 Попробуй так:
Код
Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 09, 2009, 17:50 Попробовал, всё равно 0.
Может можно ещё какие проверки зделать? я добавил Код: if (queryCount.exec()) Код: if (recordCount.isEmpty()) Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 10, 2009, 11:35 Я так понимаю, только с помощью
Код: while (queryCount.next()) {..} Название: Re: Количество записей в QSqlQuery Отправлено: Пантер от Декабрь 10, 2009, 12:31 1. Попробуй count(*)
2. Сделай минимальный прмер + БД с этой таблицей и сюда скинь. Название: Re: Количество записей в QSqlQuery Отправлено: Alchazar от Декабрь 10, 2009, 13:42 я уже выяснил в чём была моя проблема.... в невнимательности, я ввёл данные не в ту базу, с которой работал. Пару дней назад делал копию и всё скопировал в папку с похожим названием, а когда подключался к базе с помощью sqlite3.exe, я ошибся папкой(
И морочил всем тут головы весь день :-[ п.с. Код работает без проблем Название: Re: Количество записей в QSqlQuery Отправлено: MoPDoBoPoT от Декабрь 10, 2009, 16:10 :)
Да, такие слабоуловимые вещи частенько бывают. Нервы портят будь здоров. P.S. В общем случае, запросы с COUNT(field) и COUNT(*) неравнозначны. COUNT(field) даст количество строк, у которых поле field не равно NULL. В твоем примере это никак не отразится, но и смысла нет писать COUNT(hd_pcid). Название: Re: Количество записей в QSqlQuery Отправлено: vexar от Январь 21, 2010, 04:19 Подскажите, а как теперь результат вставить в QLabel ?
Пробывал так: Код: QLabel *Gef = new QLabel("Найдено:", this, qSize); Название: Re: Количество записей в QSqlQuery Отправлено: BaltikS от Январь 21, 2010, 06:46 Подскажите, а как теперь результат вставить в QLabel ? Пробывал так: Код: QLabel *Gef = new QLabel("Найдено:", this, qSize); Код: QLabel *Gef = new QLabel(tr("Найдено: ")+QString::number(qSize), this); Название: Re: Количество записей в QSqlQuery Отправлено: xokc от Январь 21, 2010, 21:22 Код: QLabel *Gef = new QLabel(tr("Найдено: %1").arg(qSize), this); |