Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.323 c
9-1063796535
z1r[0]
2003-09-17 15:02
2004.04.04
из 3d-max в .x


1-1079284537
$tranger
2004-03-14 20:15
2004.04.04
Помогите с переводчиком


3-1078210812
aga123
2004-03-02 10:00
2004.04.04
GUID в поле таблицы DBF


1-1078996913
Дас Виндовс 45
2004-03-11 12:21
2004.04.04
Сортировка массива


9-1063898465
greenrul
2003-09-18 19:21
2004.04.04
Смена дня и ночи в 2D изометрии