![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка DxDBGrid [D6, MSSQL]
Volodya_ © (2004-03-07 21:43:00)При сортировке средствами DxDBGrid сильно уменьшается скорость позиционирования на запись с помощью GotoBookmark. Как можно увеличить скорость?
stud (2004-03-09 09:18:00) [1]возможно у самого грида не все необходимые св-ва заполнены. у меня в этом гриде большие объемы нормально перевариваются. к тому же листание грида замедляет работу. елси например установить св-во автовысоты столбцов то замедление работы видно не на 800 а даже на 50 записях.
makz (2004-03-09 04:05:00) [2]У меня cxdbgrid - в приципе более тормозная штука чем dx. Но на паре тысяч записей вполне прилично работает, даже со своей сортировкой. Тормоза могут быть от вещей левых, например Lookup- поля без кэширования, "тяжелый" код в onCustomDrawCell и т.п. Проявляется это как раз после фетча всех записей, что нужно гриду для сортировки. Вообще можно присобачить свой код на сортировку - делать все датасетом - будет гораздо быстрее.
Anatoly Podgoretsky (2004-03-08 11:31:00) [3]Только не "более шустрый сервер", а более шустрый клиент с несколькими гигабайт двухканальной памяти.
Anatoly Podgoretsky (2004-03-08 11:30:00) [4]АДО может, к тому же некоторые постороннии гриды могут делать это локально, но за счет сильного пожирания ресурсов и скорости. Возможно этот DxDBGrid как раз из этой оперы. В этом случае смотреть Zacho © (07.03.04 23:05) [6]
jack128 (2004-03-08 10:51:00) [5]
> Плохиш (08.03.04 10:33) [13]
а разве датасет имеет методы для локальной сортировки?
Плохиш (2004-03-08 10:33:00) [6]>Volodya_ (08.03.04 10:10) [12]
Ты не правильно понимаешь, DBGrid ничего не сортирует, он даже ничего не знает о данных, всё делает DataSet
Volodya_ (2004-03-08 10:10:00) [7]Я понимаю так, что при сортировке в DBGrid он сортирует не затрагивая ADOQuery и после этого резко уменьшается скорось выполнения кода описаного в п. [7]. Я не говорю о 10000, у меня 800 записей и это уже заметно ...
Johnmen (2004-03-08 01:13:00) [8]Всё, что говорил Zacho © справедливо, независимо от либых внешних условий...
Если хочешь быстро сортировать получаемый НД, заведи индекс на сортирумое поле...
Zacho (2004-03-08 00:04:00) [9]
> Запросом я делал, тоже долго
Как именно делал ? В смысле, код приведи. И все сопутствуещее.
А вообще, я устраняюсь из этой ветки. Хотя бы потому, что не спец в MSSQL. У меня на IB подобные запросы работают не то чтобы быстро, а очень быстро :) Не верю, что MSSQL очень тормознее :) Скорее в обратное поверил бы :)
Volodya_ (2004-03-07 23:50:00) [10]> Хотя бы компоненты доступа.
ADOQuery, DataSource, DxDBGrid
Запросом я делал, тоже долго
Zacho (2004-03-07 23:32:00) [11]
> Какая ещё полезная информация необходима?
Хотя бы компоненты доступа.
Сортировка здесь не причем. Точнее, при том, что скорее всего при сортировке делается FetchAll.
Хочешь быстро - или делай это одним запросом, или не выбирай много записей. Или см. [6]
Volodya_ (2004-03-07 23:16:00) [12]Volodya_ (07.03.04 22:15) [3]
Вообщето задача такая:
Например, нужно выделить n - колличество записей и у всех поменять, например, поле status на 1. Пока без сортировки всё работает очень быстро, но только сделать сортировку ... все ...
Какая ещё полезная информация необходима? Вот код
for i:=0 to MainGrid.SelectedCount-1 do
begin
QueryMainList.GotoBookmark(pointer(MainGrid.selectedrows[i]));
QueryMainList.Edit;
QueryMainList.FieldByName('status').AsInteger := 1 end;
QueryMainList.Post;
Zacho (2004-03-07 23:05:00) [13]Блин, снова никакой полезной информации.
Вот тебе ответ: больше памяти, более быстрый канал, более шустрый сервер. Иначе, исходя из приведенных данных - никак.
И еще: разберись, как работает класс TDataSet. В любом случае, лишним не будет.
Традиционно ;) извеняюсь за излишне резкий тон.
Volodya_ (2004-03-07 22:45:00) [14]Клиент сам ставит фильтры (в DxDBGrid) как ему удобно ... В своей задаче я немогу сделать как "Торгово-складская система", а база ж написано MSSQL. Мне нужно както увеличить скорость позиционирования на выделенных записях
Zacho (2004-03-07 22:35:00) [15]Какая СУБД и компоненты доступа ?
Ты уверен, что клиенту нужно видеть 10000 записей ?
Ни один нормальныйчеловек не может нормальноработать с таблицей с несколькими тысячами записей.
Вот пример :
Торгово-складская система. Номенклатура - десятки тысяч. Интерфейс: слева - дерево с классификатором товаров, справа - грид с товарами, относяшимися к выбранному в treeview пункту. Естественно, есть еще фильтры и т.п. Поиск по всейноменклатуре - отдельно.
> Volodya_ (07.03.04 22:15) [3]
К сортировке это не имеет никакого отношения. Описывай задачу подробнее, телепаты - редкость.
Volodya_ (2004-03-07 22:15:00) [16]Вообщето задача такая:
Например, нужно выделить n - колличество записей и у всех поменять, например, поле status на 1. Пока без сортировки всё работает очень быстро, но только сделать сортировку ... все ...
Volodya_ (2004-03-07 22:05:00) [17]Как можно выводить не все записи когда клиенту нужно видеть все?
Както динамически подгружать? как это сделать?
Zacho (2004-03-07 21:57:00) [18]Во-первых - не использовать GotoBookmark, как сильно устаревшую и оставленную для совместимости с Д2.
Во-вторых - не сортировать средствами DxDBGrid.
В-третьих - не выбирать на клиента офигенное кол-во записей.
На самом деле, решение в пункте 3 :)