Russian Qt Forum

Qt => Базы данных => Тема начата: cya-st от Октябрь 19, 2009, 19:39



Название: Количество записей.
Отправлено: cya-st от Октябрь 19, 2009, 19:39
Всем привет.
Ламерский вопрос. :) Подскажите пожалуйста, как можно узнать количество строк после выполнения
Код
SQL
query.exec("SELECT title FROM dir_1 WHERE pid=0;");
 


Название: Re: Количество записей.
Отправлено: BRE от Октябрь 19, 2009, 19:42
int QSqlQuery::size () const

Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes. Note that for non-SELECT statements (isSelect() returns false), size() will return -1. If the query is not active (isActive() returns false), -1 is returned.

To determine the number of rows affected by a non-SELECT statement, use numRowsAffected().

See also isActive(), numRowsAffected(), and QSqlDriver::hasFeature().


Название: Re: Количество записей.
Отправлено: cya-st от Октябрь 19, 2009, 19:47
Я искал всякие Count, CountRec :)


Название: Re: Количество записей.
Отправлено: break от Октябрь 19, 2009, 20:24
SELECT count(*) FROM dir_1 WHERE pid=0


Название: Re: Количество записей.
Отправлено: cya-st от Октябрь 19, 2009, 20:28
SELECT count(*) FROM dir_1 WHERE pid=0
Этот вариант тоже рассматривал, но size компактнее.
Всем спасибо за ответы.


Название: Re: Количество записей.
Отправлено: lit-uriy от Октябрь 19, 2009, 20:35
в Qt почти всё и почти всегда измеряется "размерами" ("size")


Название: Re: Количество записей.
Отправлено: break от Октябрь 20, 2009, 02:48
Цитировать
SELECT count(*) FROM dir_1 WHERE pid=0
Этот вариант тоже рассматривал, но size компактнее.
Всем спасибо за ответы.

Конечно решать вам - но учтите несколько моментов
1) не во всех драйвераз не всех БД можно получить этот size - то есть должно быть в поддерживаемых ф-ях драйвера Qt
2) работать с большим количеством записей будет медленнее чем через запрос т.к. скорее всего (правда в исходники я не смотрел) метод size делает fetchALL(); то есть прогружает все записи запроса в память.. Если это так то разница будем тем больше чем больше записей в БД - причем запрос количества записей через (SELECT count(*) FROM dir_1 WHERE pid=0) будед выполняться почти константное время, а метод size прямо пропорциональное числу строк...


Название: Re: Количество записей.
Отправлено: BRE от Октябрь 20, 2009, 08:10
2) работать с большим количеством записей будет медленнее чем через запрос т.к. скорее всего (правда в исходники я не смотрел) метод size делает fetchALL();
Ты ошибаешься.


Название: Re: Количество записей.
Отправлено: break от Октябрь 20, 2009, 11:52
А как он работает - строит запрос аналогичный select count() ? если да - то ошибаюсь!


Название: Re: Количество записей.
Отправлено: BRE от Октябрь 20, 2009, 13:23
А как он работает - строит запрос аналогичный select count() ? если да - то ошибаюсь!
Это зависит от драйвера/базы данных. Если БД поддерживает возвращение количества строк запроса, то size() это количество возвращается, иначе он просто возвращает -1.
Я же привел выше цитату из assistant.