Текущий архив: 2004.04.04;
Скачать: CL | DM;
Вниз
Сортировка DxDBGrid Найти похожие ветки
← →
Volodya_ (2004-03-07 21:43) [0]При сортировке средствами DxDBGrid сильно уменьшается скорость позиционирования на запись с помощью GotoBookmark. Как можно увеличить скорость?
← →
Zacho © (2004-03-07 21:57) [1]Во-первых - не использовать GotoBookmark, как сильно устаревшую и оставленную для совместимости с Д2.
Во-вторых - не сортировать средствами DxDBGrid.
В-третьих - не выбирать на клиента офигенное кол-во записей.
На самом деле, решение в пункте 3 :)
← →
Volodya_ (2004-03-07 22:05) [2]Как можно выводить не все записи когда клиенту нужно видеть все?
Както динамически подгружать? как это сделать?
← →
Volodya_ (2004-03-07 22:15) [3]Вообщето задача такая:
Например, нужно выделить n - колличество записей и у всех поменять, например, поле status на 1. Пока без сортировки всё работает очень быстро, но только сделать сортировку ... все ...
← →
Zacho © (2004-03-07 22:35) [4]Какая СУБД и компоненты доступа ?
Ты уверен, что клиенту нужно видеть 10000 записей ?
Ни один нормальный человек не может нормально работать с таблицей с несколькими тысячами записей.
Вот пример :
Торгово-складская система. Номенклатура - десятки тысяч. Интерфейс: слева - дерево с классификатором товаров, справа - грид с товарами, относяшимися к выбранному в treeview пункту. Естественно, есть еще фильтры и т.п. Поиск по всей номенклатуре - отдельно.
> Volodya_ (07.03.04 22:15) [3]
К сортировке это не имеет никакого отношения. Описывай задачу подробнее, телепаты - редкость.
← →
Volodya_ (2004-03-07 22:45) [5]Клиент сам ставит фильтры (в DxDBGrid) как ему удобно ... В своей задаче я немогу сделать как "Торгово-складская система", а база ж написано MSSQL. Мне нужно както увеличить скорость позиционирования на выделенных записях
← →
Zacho © (2004-03-07 23:05) [6]Блин, снова никакой полезной информации.
Вот тебе ответ: больше памяти, более быстрый канал, более шустрый сервер. Иначе, исходя из приведенных данных - никак.
И еще: разберись, как работает класс TDataSet. В любом случае, лишним не будет.
Традиционно ;) извеняюсь за излишне резкий тон.
← →
Volodya_ (2004-03-07 23:16) [7]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:32) [8]
> Какая ещё полезная информация необходима?
Хотя бы компоненты доступа.
Сортировка здесь не причем. Точнее, при том, что скорее всего при сортировке делается FetchAll.
Хочешь быстро - или делай это одним запросом, или не выбирай много записей. Или см. [6]
← →
Volodya_ (2004-03-07 23:50) [9]> Хотя бы компоненты доступа.
ADOQuery, DataSource, DxDBGrid
Запросом я делал, тоже долго
← →
Zacho © (2004-03-08 00:04) [10]
> Запросом я делал, тоже долго
Как именно делал ? В смысле, код приведи. И все сопутствуещее.
А вообще, я устраняюсь из этой ветки. Хотя бы потому, что не спец в MSSQL. У меня на IB подобные запросы работают не то чтобы быстро, а очень быстро :) Не верю, что MSSQL очень тормознее :) Скорее в обратное поверил бы :)
← →
Johnmen © (2004-03-08 01:13) [11]Всё, что говорил Zacho © справедливо, независимо от либых внешних условий...
Если хочешь быстро сортировать получаемый НД, заведи индекс на сортирумое поле...
← →
Volodya_ (2004-03-08 10:10) [12]Я понимаю так, что при сортировке в DBGrid он сортирует не затрагивая ADOQuery и после этого резко уменьшается скорось выполнения кода описаного в п. [7]. Я не говорю о 10000, у меня 800 записей и это уже заметно ...
← →
Плохиш (2004-03-08 10:33) [13]>Volodya_ (08.03.04 10:10) [12]
Ты не правильно понимаешь, DBGrid ничего не сортирует, он даже ничего не знает о данных, всё делает DataSet
← →
jack128 © (2004-03-08 10:51) [14]
> Плохиш (08.03.04 10:33) [13]
а разве датасет имеет методы для локальной сортировки?
← →
Anatoly Podgoretsky © (2004-03-08 11:30) [15]АДО может, к тому же некоторые постороннии гриды могут делать это локально, но за счет сильного пожирания ресурсов и скорости. Возможно этот DxDBGrid как раз из этой оперы. В этом случае смотреть Zacho © (07.03.04 23:05) [6]
← →
Anatoly Podgoretsky © (2004-03-08 11:31) [16]Только не "более шустрый сервер", а более шустрый клиент с несколькими гигабайт двухканальной памяти.
← →
makz (2004-03-09 04:05) [17]У меня cxdbgrid - в приципе более тормозная штука чем dx. Но на паре тысяч записей вполне прилично работает, даже со своей сортировкой. Тормоза могут быть от вещей левых, например Lookup- поля без кэширования, "тяжелый" код в onCustomDrawCell и т.п. Проявляется это как раз после фетча всех записей, что нужно гриду для сортировки. Вообще можно присобачить свой код на сортировку - делать все датасетом - будет гораздо быстрее.
← →
stud © (2004-03-09 09:18) [18]возможно у самого грида не все необходимые св-ва заполнены. у меня в этом гриде большие объемы нормально перевариваются. к тому же листание грида замедляет работу. елси например установить св-во автовысоты столбцов то замедление работы видно не на 800 а даже на 50 записях.
Страницы: 1 вся ветка
Текущий архив: 2004.04.04;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.026 c