Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Порционный вывод данных


Автор: -Сергей- 28.4.2016, 22:37
Всем привет!
Может вопрос вообще не в этот раздел, но так как он все же связан с базами данных, думаю что все-таки сюда.
Есть таблица в MySQL, в которой ~5 млн записей, которая постоянно растет. Грузить ее всю в датасет для простого просмотра это полный бред. Долгое выполнение, нехватка памяти и т.д.
Так вот, как можно реализовать вывод данных по частям?
Про оператор LIMIT я знаю, прошу не предлагать, так как это формирование нового запроса к базе и его выполнение заново.
Для подключения к БД использую ADO (MySQL ADO Driver),  грид от EhLib (TDBGridEh), Delphi XE10
Наверное многие знают такой инструмент под названием PL/SQL Developer, так там как раз такая функция есть. Сначала грузится какое-то количество записей, нажал на кнопку и еще подгрузилось.
Да и на многих сайтах такая функция есть, взять например соцсети, листаешь вниз и данные добавляются. С веб разработками мало знаком, наверно jquery называется.
Может я привожу в сравнение разные базы и разные технологии (веб и десктоп), но все же...

Автор: Vas 29.4.2016, 16:20
Цитата(-Сергей- @  28.4.2016,  22:37 Найти цитируемый пост)
Да и на многих сайтах такая функция есть, взять например соцсети, листаешь вниз и данные добавляются. С веб разработками мало знаком, наверно jquery называется.

Jquery или читсый JS используют, но это как раз работает с LIMIT. Т.е. каждый раз при достижении конца страницы отправляется асинхронный запрос за новыми порциями и  БД их выдает.

MyDAC и UniDAC умеют такое, про ADO не подскажу, нет установленных на рабочем компе дельфей :(

Автор: DYUMON 30.5.2016, 11:57
 Если у тебя есть в таблице уникальный автоинкрементный ключ  тогда делаешь запрос  или хранимку такого вида.

Код

SELECT * FROM table WHERE id>=:start AND id<=:end

соответственно start = 1 и end=1000
и соответственно при нажатие на кнопку будет происходить увеличение данных значений и выбранного диапазона. Это как вариант.
Либо почитай про курсоры в mysql

Автор: Vas 1.6.2016, 07:40
DYUMON, почитайте про LIMIT в MySQL он гарантировано выведет число нужных записей, если они есть. А в Вашем случае в диапазоне уникального ключа могут быть и большие пустоты после удаления данных.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)