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


Автор: RST8 18.2.2007, 21:11
Имеем большую таблицу Microsoft Access, гдето на 50 000 записей. Подключаемся через ADO. Связываем это все со стандартным дбгридом и запускаем программу. Грид заполняется данными несколько минут. 

Вопрос: как это ускорить?

Автор: Savek 19.2.2007, 09:50
Не грузить сразу все 50 000 записей (не использовать TTable)! Пользователю они не понадобятся (все и сразу). Используй запрос c условием отбора для отображения части записей.

Автор: RST8 11.3.2007, 19:13
Наконец дошел ход до этой части программы. Так вот как бы сделать что бы навигация по полученной сетке выполнялась нормально. Т.е. как реализовать динамическую подгрузку данных? Кто как из такой ситуации выкручивался?

Автор: Savek 12.3.2007, 09:35
Либо делать выборку по условию и подгружать только нужные записи в данный момент, либо использовать ClientDataSet, с параметром PacketRecords=видимое кол-во записей

Можно комбинировать оба способа

Автор: kobra 12.3.2007, 10:27
в TADOQuery есть ExecuteOptions

Автор: RST8 12.3.2007, 22:53
Цитата(Savek @  12.3.2007,  09:35 Найти цитируемый пост)
PacketRecords

Где это искать?. Так нашел, но похоже с ADO это не работает.



Цитата(kobra @  12.3.2007,  10:27 Найти цитируемый пост)
ExecuteOptions

Непомогает.

Автор: kobra 13.3.2007, 08:54
Цитата(RST8 @  12.3.2007,  22:53 Найти цитируемый пост)
Непомогает.
если вклучить eoAsyncFetch, то у юзера создоется впечетление что данние загрузилис, грид заполнен

Автор: ama_kid 13.3.2007, 12:55
Цитата
Вопрос: как это ускорить?

Отказаться от тяжеловесного и не слишком умного грида... В итоге получится так (см. прикрепленный проект)

Автор: RST8 13.3.2007, 20:53
Спасибо за внимание к моему вопросу 

Цитата(kobra @  13.3.2007,  08:54 Найти цитируемый пост)
если вклучить eoAsyncFetch, то у юзера создоется впечетление что данние загрузилис, грид заполнен


Может конечно я что то не так делаю, но нормального результата получить немогу. У самого грида который я пробую есть параметр буфиризировать данные. Так вот пока он их все не получет он их не отображает и программ типа висит. Если же эту опцию отключить, то независимо от eoAsyncFetch от отображает их сразу, но при попытке навигации по нему жутко тормозит все время. 

Цитата(ama_kid @  13.3.2007,  12:55 Найти цитируемый пост)
В итоге получится так (см. прикрепленный проект)

У меня создалось впечатление что это не тот проект ... 

Так что пока не нашел ничего лучше вывода окошка со словом "подождите немного"  smile 

Автор: SergeBS 14.3.2007, 11:28
RST8, 
Размер записи?
Работа локально или по сети? Если по сети - ее скорость?
При загрузке в гриде данные мельтешат?

Автор: RST8 14.3.2007, 18:30
Цитата(SergeBS @  14.3.2007,  11:28 Найти цитируемый пост)

Размер записи?

20 полей половина числовые половина текстовый на 100 знаков

Цитата

Работа локально или по сети? 
Если по сети - ее скорость?

локально

Цитата

При загрузке в гриде данные мельтешат?


нет, их грид предварительно кэширует, если это отключить то все равно не мельтешат, появляются сразу. Но навигация все время тормозит жутко.

Автор: SergeBS 15.3.2007, 08:28
RST8, 
Цитата
Имеем большую таблицу Microsoft Access, гдето на 50 000 записей. 

Цитата
20 полей половина числовые половина текстовый на 100 знаков

Т.е. где-то 60-80 Мб. Ну и что ты хочешь? В Word-е попробуй похожее по размерам открыть - тоже тормозить будет. Урезай до приемлемых размеров. Все равно человек столько сразу и не увидит и не поймет. Да и на экран даже 1 запись не уместится.

Автор: RST8 15.3.2007, 18:17
Цитата(SergeBS @  15.3.2007,  08:28 Найти цитируемый пост)
Т.е. где-то 60-80 Мб. Ну и что ты хочешь? В Word-е попробуй похожее по размерам открыть - тоже тормозить будет. Урезай до приемлемых размеров. Все равно человек столько сразу и не увидит и не поймет. Да и на экран даже 1 запись не уместится.


Это всего 14 Мб. Что я хочу? Хм... Наверное чтобы ее начало сразу появилось на экране а остаток догружался фоново. По крайней мере сам Access открывает ее мгновенно. 

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