Сортировка в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сортировка в DBGrid

Сообщение Xenar »

Такой вопрос. В проекте сортировка в DBGride выполнена через изменения в ORDER BY. (БД MySQL) Все нормально работает. Но база разрастается и такой метод сортировки стал подтормаживать.
Как реализовать сортировку в самом сете (SQLQuery1) и связать ее с DBGride ?? Может кто что подскажет?
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

а разве ORDER BY не является частью SQL-запроса из SQLQuery?
DBGrid к сортировке никакого отношения не имеет, он только отображает информацию из Dataset
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Да сортировка делается путем повторного запроса к MySQL путем изменения значения в ORDER BY, все верно.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Xenar писал(а):так имхо будет быстрее обрабатыватся

Наивно :wink:
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Mr.Smart писал(а):
Xenar писал(а):так имхо будет быстрее обрабатыватся

Наивно :wink:

Ясно, а других методов не существует, кроме как вышеупомянутых??
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Xenar писал(а):Ясно, а других методов не существует, кроме как вышеупомянутых??

Если накладные расходы на извлечение данных являются слишком значительными, тогда есть такие варианты:
1. Унаследоваться от текущего датасет-а и научить его сортировать
2. Найти виртуальный датасет на клиенте и пользоваться им (загружать в него из открытого)
3. Завести синхронизируемую базу на клиенте и использовать её в качестве рабочей (менять в запросе к клиентской базе данных ORDER BY)

ЗЫ Стоит указать задачу
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

Xenar писал(а):Ясно, а других методов не существует, кроме как вышеупомянутых??

http://freepascal.ru/article/lazarus/20090720000443/
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Спасибо всем, буду разбираться
alexrayne
постоялец
Сообщения: 125
Зарегистрирован: 03.12.2008 15:56:26

Сообщение alexrayne »

посмотрите в сторону TClientDataSet
а лучше
viewtopic.php?f=26&t=2523&start=330&hilit=FBDataSet+%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0+%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0+%D0%BA+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC+FireBird%2FInterbase.
там есть встроеная сортировка полнозагруженого рекордсета.
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Если база разрастается, то не нужно тянуть все записи на клиента.
Можно ограничить, например, 500стами строк. Понятно, что к гриде еще будет нужен фильтр.

Если же сортировать на клиенте, то всегда придется тянуть все строки на клиента сразу.
И все-таки лучше сортировать запросом. Лучше подумать об индексах...
sanjok
незнакомец
Сообщения: 8
Зарегистрирован: 24.05.2011 08:49:07

Сообщение sanjok »

Xenar писал(а):Да сортировка делается путем повторного запроса к MySQL путем изменения значения в ORDER BY, все верно.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.


TKDBGrid по-моему умеет сортировать прямо в таблице, если Вас это устроит.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.


Легко ! Делайте запрос не select , а insert во временную таблицу , желательно memory, а затем select из временной таблицы и у вас при минимуме телодвижений возможность многократной пересортировки без запроса в основную базу
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Если тянуть таблицу в локальную и потом сортировать локально, то не будет видно изменения сделанные другими клиентами. Лучше таки оптимизировать запросы.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

А что, это так важно ? И так и так изменения сделанные другими клиентами увидятся не скоро
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Кому важно, а кому и нет. А почему при сортировке на сервере изменения не будут видны?
Ответить