|
|
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Доброе время суток форумчане. При открытии программы я как всегда открываю dataset запросом. Код: pascal 1. 2. 3. 4. 5. В запросе « ARequire », содержится « order by ». Захотел восспользоваться сортировкой DBGridEh, - сортировка работает, если в запросе «SelectSQL» предварительно нет предложения «order by». Т.е. это получается, мне при нажатии на колонку (в «DBGridEh1TitleBtnClick»), нужно редактировать запрос в «SelectSQL», т.е. убирать из него «order by»? Спасибо за ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 08:52 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
насколько я помню, там оно само вставляет order by в запрос и перевыполняет его Чем довольно часто доставляет пользователям "радостей", когда запрос довольно долго работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 08:55 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
defecator, Да, так оно и работает. Только у меня не получается перед нажатием, отредактировать запрос, т.е. убрать из него "order by" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:07 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Sergey-2008defecator, Да, так оно и работает. Только у меня не получается перед нажатием, отредактировать запрос, т.е. убрать из него "order by" вообще не вставляй order by, пусть пользователь нажимает колонки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:09 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Я бы с радостью, но лучше бы сразу открывать dataset отсортированным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:11 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Sergey-2008Я бы с радостью, но лучше бы сразу открывать dataset отсортированным нет, это ошибка, потому что пользователю будет непонятно, по какому столбцу сортированы данные Убирай order by, в гриде в нужной колонке указывай, что сортировано по ней, грид сам вставит нужный order by и откроет датасет тогда и усеру будет сразу ясно, и проблем с order by не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:16 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
ваше предложение интересное... рассмотрю... (я подсвечиваю отсортированный сстолбик) А на будущее, для информации, можно каким нибудь образом, перед выполнением "DBGridEh1TitleBtnClick", убирать из запроса "order by"? Так чтоб запрос не переоткрывать? для корректной отработки "DBGridEh1TitleBtnClick". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:38 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Sergey-2008ваше предложение интересное... рассмотрю... (я подсвечиваю отсортированный сстолбик) А на будущее, для информации, можно каким нибудь образом, перед выполнением "DBGridEh1TitleBtnClick", убирать из запроса "order by"? Так чтоб запрос не переоткрывать? для корректной отработки "DBGridEh1TitleBtnClick". ты снова скатился к костылям ? делай сразу правильно, как я тебе сказал, и не надо ничего убирать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 09:48 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
defecatorты снова скатился к костылям ? делай сразу правильно, как я тебе сказал, и не надо ничего убирать Ничего не утверждаю... но вот такая конструкция, (с работой order by в предыдущем запросе) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Посмотрим, как понравится преподу, или с предварительной сортировкой или без... (можно сделать отдельной процедурой и все 6 датасетов, через нее гнать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 19:07 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Sergey-2008defecatorты снова скатился к костылям ? делай сразу правильно, как я тебе сказал, и не надо ничего убирать Ничего не утверждаю... но вот такая конструкция, (с работой order by в предыдущем запросе) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Посмотрим, как понравится преподу, или с предварительной сортировкой или без... (можно сделать отдельной процедурой и все 6 датасетов, через нее гнать) если твой препод знает, как работает Eh, он тебя ссаными тряпками в армию отправит вместо того, чтобы использовать готовые средства, ты изобретаешь костыль на костыле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 19:12 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
а можно обмануть Eh? )) Например, твой запрос обернуть, чтобы order by был за скобками? Код: sql 1. 2. 3. в итоге, после сортировки Eh будет Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2018, 09:54 |
|
||
|
Конфликт 'order by' в запросе, при использовании встроенной сортировки DBGridEh
|
|||
|---|---|---|---|
|
#18+
Sergey-2008Доброе время суток форумчане. При открытии программы я как всегда открываю dataset запросом. Код: pascal 1. 2. 3. 4. 5. В запросе « ARequire », содержится « order by ». Захотел восспользоваться сортировкой DBGridEh, - сортировка работает, если в запросе «SelectSQL» предварительно нет предложения «order by». Т.е. это получается, мне при нажатии на колонку (в «DBGridEh1TitleBtnClick»), нужно редактировать запрос в «SelectSQL», т.е. убирать из него «order by»? Спасибо за ответ 1. Что такое ADataSet и что такое ARequire ? 2. Сортировка с помощью TDbGridEh бывает "серверной", бывает "клиентской". О чем баишь, конкретно? 3. Документация: Использование DBGridEh для сортировки и фильтрации данных в DataSetDBGridEh не может сортировать или фильтровать данные самостоятельно. Но он может послать команду для сортировки или фильтрации специальному объекту, который сделает это в DataSet'е. Вы можете выбрать 2 типа сортировки (локальная и серверная) используя свойство SortLocal и два типа фильтрации (также локальная и серверная), но реальная возможность применения каждого типа операции зависит от типа DataSet'а. Например TBDEDataSet - не поддерживает локальную сортировку (внутри DataSet'а), так что вы не сможете сортировать данные локально, когда grid присоединен к TQuery или TTable. Библиотека имеет набор специальные объекты для сортировки/фильтрации стандартных типов DataSet'ов постовляемых вместе с Delphi. Ниже вы можете видеть таблицу специальных объектов и DataSet'ов в которых объекты могут сортировать или фильтровать данные. UnitDataSetLocal sortingServer sortingLocal filteringServer filteringEhLibBDETQuery/TTableNYYYEhLibADOTADOQuery/TADODataSetYYYYEhLibCDSTClientDataSetYYYYEhLibDBXTSQLQuery/TSQLDataSet NYNYEhLibIBXTIBQuery/TIBDataSetNYYYEhLibMTETMemTableEhYY*YY* * Когда Grid настроен на серверную сортировку или фильтрацию (SortLocal=False, STFilter.Local=False), то выполнение сортировки передается объекту TMemTableEh.DataDriver. Когда grid настроен для сортировки на Сервере, специальный объект строит SQL-выражение ORDER BY и заменяет строку ORDER BY в свойстве Command или SQL DataSet'а и переоткрывает его. Когда grid настроен для локальной сортировки специальный объект производит сортировку учитывая специфику конкретного типа DataSet'а. Когда grid настроен для Локальной фильтрации, специальный объект строит выражение и присваивает его свойству Filter DataSet'а. Перед этим нужно заранее выставить значение TDataSet.Filtered в True. Когда Grid настроен для фильтрации на сервере, специальный объект строит выражение для предложения 'WHERE' SQL-строки DataSet'а. Он пытается найти строку, начинющуюся с ключевого выражения '/*Filter*/' (Вы можете изменять это ключевое выражение используя глобальную переменную SQLFilterMarker) в SQL-выражении и добавляет выражение для фильтрации после ключа в той же строке. Так что, SQL-запрос должен содержать строку, начинающуюся с '/*Filter*/' . Например: Код: sql 1. 2. 3. 4. Для автоматической фильтрации/сортировки данных в dataset'е требуется добавить один из модулей EhLibXXX (EhLibADO, EhLibBDE, EhLibCDS ... в зависимости от dataset'а, подключенного к grid') в раздел 'uses' любого модуля вашего проекта. Эти EhLibXXX модули содержат код для регистрации класса который наследуется от TDatasetFeaturesEh (специальный объект) и осуществляет фильтрацию/сортировку в DataSet'е. Для DataSet'ов сторонних разработчиков можно написать и зарегестрировать свой собственный класс или написать обработчики событий OnApplyFilter и/или OnSortMarkingChanged для каждого требуемого grid'а. Кроме того можно написать OnApplyFilter и/или OnSortMarkingChanged для глобальной переменной DBGridEhDataService. Эти события имеют тип TNotifyEvent, где в качестве Sender'а выступает TCustomDBGridEh. Настройка сетки для сортировки данных:TDBGridEh позволяет отображать специальные sortmarking bitmaps (маленькие треугольники) в правой части заголовков столбцов. Для отображения sortmarking bitmaps добавьте dghAutoSortMarking в свойство OptionsEh. Добавьте также dghMultiSortMarking в OptionsEh для обеспечения одновременной пометки сортировки по нескольким столбцам. Установите Column.Title.TitleButton в True для заголовков, у которых вы хотите изменять sortmarkers в run-time. Вы можете установить свойство сетки ColumnDefValues.Title.TitleButton чтобы позволить метки сортировки для всех столбцов, у которых не менялось свойство Column.Title.TitleButton. В run-time клик на заголовке изменяет порядок сортировки. При нажатом Ctrl можно отметить насколько столбцов одновременно. После клика на заголовке, если событие OnSortMarkingChanged не пусто то оно вызывается, иначе дейсвие передается на выполнение специальному объекту, если тот зарегистрирован. Специальный объект использует свойство Grid.SortLocal для определения типа сортировки данных: локально либо на сервере. Если вы пишете обработчик события OnSortMarkingChanged вы можете использовать свойство TDBGrid.SortMarkedColumns для доступа к сортируемым столбцам и свойство TColumnEh.Title.SortMarker для получения состояния маркера сортировки. - чытав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2018, 10:43 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39661587&tid=2040735]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
382ms |
get topic data: |
7ms |
get forum data: |
4ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 720ms |

| 0 / 0 |
