Добрый вечер.
с SQLLite разбираюсь второй день, еще многого не знаю, но первое, что неприятно удивило:
почему после sql-запроса "select * from..." я не могу где-нибудь заранее узнать кол-во записей, которое вернулось в результирующем наборе?
(вероятно, разработчики SQLLite просто поленились добавить свойство к объекту (что-нибудь вроде Query.RecordCount), и теперь другим приходится выполнять
дублирующий повторный sql-запрос или считать кол-во итераций в цикле (while not Query.EOF do ...).
Кстати, в моем случае вариант с циклом не подходит, т.к. результат поиска может содержать тысячи строк, а выводить в интерфейс нужно дозировано (постранично =12 записей на листе). В общем, нет смысла листать всю выборку, только чтобы посчитать кол-во строк...
в итоге вот, что я придумал: (предупреждаю - слабонервным лучше не смотреть))
Код:
SELECT * FROM tb_films WHERE tags LIKE '%яблоки%'
union
SELECT -1, count(*) as Cnt, null, null, null, null, null, null, null, null, null, null, null FROM tb_films WHERE tags LIKE '%яблоки%'
ORDER BY id
..благодаря тому, что в поле "id" содержит только положительные значения (и это не автоинкремент), а я задал для второго запроса id=-1, то после сортировки как раз получится, что строка с кол-вом записей (результат выборки) - будет первой по счету!
Останется просто считать из нее поле "cnt" (равное кол-ву строк), но не показывать юзеру, а в таблицу вывести только строки начиная со второй!..
получается, по сути, те же 2 одинаковых запроса, зато ОДНИМ заходом!
т.е. в коде не придется после select-а закрывать таблицу, чтобы повторно выполнит тот же запрос, но с уже с count(*), снова считывать результат и т.п.
вроде работает!)
но я, конечно, осознаю, что все это похоже на извращение...))
в связи с этим животрепещущий вопрос:
может кто подскажет более правильный (изящный) вариант получения кол-ва строк, которое вернула выборка?
p.s. на случай, если это важно: пишу в Delphi 7, работаю с БД с помощью DISQLite