Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

как быстро загрузить в Listview до 500 000 записей?   Найти похожие ветки 

 
Ruzzz ©   (2008-11-16 15:53) [0]

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

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

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

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


 
Palladin ©   (2008-11-16 15:57) [1]

TListView.OwnerData + F1


 
Ruzzz ©   (2008-11-16 15:59) [2]

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


 
Ruzzz ©   (2008-11-16 18:09) [3]

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

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 18:11) [4]

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


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


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

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


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

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


 
CodeMaster ©   (2008-11-16 21:10) [7]

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


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

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

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


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


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

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


 
tesseract ©   (2008-11-16 23:12) [10]


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


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


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


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

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


 
MsGuns ©   (2008-11-17 11:16) [12]

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


 
MsGuns ©   (2008-11-17 11:20) [13]

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


 
Ega23 ©   (2008-11-17 11:48) [14]


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


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



Страницы: 1 вся ветка

Текущий архив: 2008.12.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
2-1226310941
AHTOLLlKA
2008-11-10 12:55
2008.12.28
иконка в трее без форм


2-1227185785
snake-as
2008-11-20 15:56
2008.12.28
Как запустить *bat скрипт


2-1226904399
Rav4
2008-11-17 09:46
2008.12.28
Подсчитать вещественные числа в Listbox


2-1226565058
дед Маздай
2008-11-13 11:30
2008.12.28
Посылка строки из TThread в основной поток


8-1188655791
Dr. Andrew
2007-09-01 18:09
2008.12.28
Как программно вызвать палитру цветов от кнопки как в MS Word?