Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.03.2018, 20:34
lx09x lx09x вне форума
Прохожий
 
Регистрация: 01.03.2018
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Помогите с SQL-запросом или, быть может, есть свойство RecordCount...

Добрый вечер.
с 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
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter