Сортировка в DBGrid
Модератор: Модераторы
Сортировка в DBGrid
Такой вопрос. В проекте сортировка в DBGride выполнена через изменения в ORDER BY. (БД MySQL) Все нормально работает. Но база разрастается и такой метод сортировки стал подтормаживать.
Как реализовать сортировку в самом сете (SQLQuery1) и связать ее с DBGride ?? Может кто что подскажет?
Как реализовать сортировку в самом сете (SQLQuery1) и связать ее с DBGride ?? Может кто что подскажет?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
а разве ORDER BY не является частью SQL-запроса из SQLQuery?
DBGrid к сортировке никакого отношения не имеет, он только отображает информацию из Dataset
DBGrid к сортировке никакого отношения не имеет, он только отображает информацию из Dataset
Да сортировка делается путем повторного запроса к MySQL путем изменения значения в ORDER BY, все верно.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.
Xenar писал(а):так имхо будет быстрее обрабатыватся
Наивно
Mr.Smart писал(а):Xenar писал(а):так имхо будет быстрее обрабатыватся
Наивно
Ясно, а других методов не существует, кроме как вышеупомянутых??
Xenar писал(а):Ясно, а других методов не существует, кроме как вышеупомянутых??
Если накладные расходы на извлечение данных являются слишком значительными, тогда есть такие варианты:
1. Унаследоваться от текущего датасет-а и научить его сортировать
2. Найти виртуальный датасет на клиенте и пользоваться им (загружать в него из открытого)
3. Завести синхронизируемую базу на клиенте и использовать её в качестве рабочей (менять в запросе к клиентской базе данных ORDER BY)
ЗЫ Стоит указать задачу
Xenar писал(а):Ясно, а других методов не существует, кроме как вышеупомянутых??
http://freepascal.ru/article/lazarus/20090720000443/
Спасибо всем, буду разбираться
посмотрите в сторону 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.
там есть встроеная сортировка полнозагруженого рекордсета.
а лучше
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.
там есть встроеная сортировка полнозагруженого рекордсета.
Если база разрастается, то не нужно тянуть все записи на клиента.
Можно ограничить, например, 500стами строк. Понятно, что к гриде еще будет нужен фильтр.
Если же сортировать на клиенте, то всегда придется тянуть все строки на клиента сразу.
И все-таки лучше сортировать запросом. Лучше подумать об индексах...
Можно ограничить, например, 500стами строк. Понятно, что к гриде еще будет нужен фильтр.
Если же сортировать на клиенте, то всегда придется тянуть все строки на клиента сразу.
И все-таки лучше сортировать запросом. Лучше подумать об индексах...
Xenar писал(а):Да сортировка делается путем повторного запроса к MySQL путем изменения значения в ORDER BY, все верно.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.
TKDBGrid по-моему умеет сортировать прямо в таблице, если Вас это устроит.
Но мне хочется чтобы сортировка была в самом Dataset без повторного запроса к БД, так имхо будет быстрее обрабатыватся.
Легко ! Делайте запрос не select , а insert во временную таблицу , желательно memory, а затем select из временной таблицы и у вас при минимуме телодвижений возможность многократной пересортировки без запроса в основную базу
А что, это так важно ? И так и так изменения сделанные другими клиентами увидятся не скоро
