Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как быстро загрузить в Listview до 500 000 записей? [D7]


Ruzzz ©   (2008-11-16 15:53:00) 

Привет! Сам вопрос звучить немного глупо, но вот проблема, как проги для работы с БД это делают? Я так понимаю что стандартные средства типа TListview не могут этого делать?

Может кто-то подсказать статьи или хоть намекнуть на приемы какие?

Может подгружать самому всю свою инфу, а потом как то переделывать TListview.Items.Add или точнее смотреть как он это делает и просто переделать метод?

Может использовать буфер, в один момент загружать лишь часть инфы в TListview? Корректировать вертикальный скролл и следить за ним, при перемешении подгружать нужную инфу? Все это кажется каким-то не правильным :(


Ega23   (2008-11-17 11:48:00) [1]


> апример, наборы данных (наследники TDataSet), которые умеют
> делать много того, чего боксы не умеют (например, поиски,
>  сортировки, фильтрации и т.д.)


Зачем на клиенте в конкретный момент времени данных больше, чем помещается в видимой области визуального контрола?
Можешь объяснить?


MsGuns   (2008-11-17 11:20:00) [2]

Блин, нажал не ту кнопке в этой долбанной опере.
.. RxLib), если же источник один, то я бы использовал TClientDataSet в локальном, файловом режиме, а такжке для отображения TDataSource+TDBGrid - все это замечательно летает на сотнях тысячах записей


MsGuns   (2008-11-17 11:16:00) [3]

Использовать боксы для ХРАНЕНИЯ и ПОИСКА большого кол-ва табличных данных - явно неудачное решение. Существует множество куда более удобных средств для этого. Например, наборы данных (наследники TDataSet), которые умеют делать много того, чего боксы не умеют (например, поиски, сортировки, фильтрации и т.д.)
Если данные берутся каждый раз с разных мест, т.е. нет фикстрованного и стабильного источника, то подойдет датасет в памяти (в библиотеке


KilkennyCat   (2008-11-16 23:43:00) [4]


> но а если пользователь не знает что находится в архиве?

а если знает, то это - инопланетянин. полмиллиона записией помнить...


tesseract   (2008-11-16 23:12:00) [5]


> но а если пользователь не знает что находится в архиве?


Пусть не знает дальше. Подгрузку можно по построенному дереву организовать. и SQL в принципе, в таком случае рулит.


CodeMaster   (2008-11-16 23:00:00) [6]


> Юрий Зотов ©   (16.11.08 22:03) [8]

Да ты прав конечно, это ненужное забитие памяти, но а если пользователь не знает что находится в архиве?


Юрий Зотов   (2008-11-16 22:03:00) [7]

> CodeMaster ©   (16.11.08 21:10) [7]

Даже если присобачить систему поиска, то зачем грузить данные в визуальный контрол? Система поиска прекрасно может работать и с невидимыми данными, а отображать уже найденное. Поэтому смысла в полной загрузке всех данных в визуальный контрол все равно нет.


CodeMaster   (2008-11-16 21:10:00) [8]

Ну если только присобачить туда систему поиска. И то нужна она будет если у тебя это будет Архив


Юрий Зотов   (2008-11-16 20:42:00) [9]

Полмиллиона записей в визуальный контрол? Какой же в этом смысл? Ведь юзер все равно практически не сможет с ним работать.


Правильный$Вася   (2008-11-16 19:39:00) [10]


> как быстро загрузить в Listview до 500 000 записей? [D7]
>  как проги для работы с БД это делают?

вообще-то такие программы используют специальные db-контролы, которые не содержат данных, я являются только дыркой для показа содержимого датасетов
а это заметно быстрее и функциональнее


Ruzzz   (2008-11-16 18:11:00) [11]

да забыл, если у вас файл уже содержит инфу о кол-ве и т.д., т.е. есть какой-либо заголовок, то первый пункт вообще быстр, не нужно проходит по всему файлу


Ruzzz   (2008-11-16 18:09:00) [12]

мож кому нада будет:

1) Открываем файл данных, подсчитываем кол-во записей, заодно формируем список Records (offset, size) для каждой записи, у меня это очень быстро получается

2) далее устанавливаем ListView.Items.Count

3) ранее вставляем код в ListView.OnData - тут передается один параметр Item: TListItem, смотрите на Item.Index и быстренько читаете из файла запись с нужной позиции используя ранее созданный список Records, используя Item.Caption и Item.SubItems.Add(n) выводите нужную инфу

4) есть еще ListView.OnDataHint -передает StartIndex, EndIndex: Integer - чтобы вы могли заранее подгрузить записи в требуемом диапазоне

Вообщем все оказалось просто :)


Ruzzz   (2008-11-16 15:59:00) [13]

ага, точно, извиняюсь, и спасибо!!! :)


Palladin   (2008-11-16 15:57:00) [14]

TListView.OwnerData + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо