"EhLib.Com" https://forum.ehlib.com/ru/ |
|
Ошибка при множественном локальном фильтре в EhLibADO https://forum.ehlib.com/ru/viewtopic.php?f=4&t=2966 |
Страница 1 из 1 |
Автор: | ADSoft [ 30 июн 2020, 08:53 ] |
Заголовок сообщения: | Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. На всех версиях EhLib 9.5 (вплоть до 9.5.20) в EhLibADO при указании более одного значения в фильтре (фильтр локальный) происходит ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом". Как воспроизвести: 1. Запускаем пример Demos\DBGridEh.SortNFilter.ADOQuery\Project1.dpr 2. Нажимаем на кнопку "Filter is on Server", после чего надпись на ней изменяется на "Filter is on Client" 3. В сетке в стоке фильтра в поле "OrderNo" вводим "in (12,27)" (без двойных кавычек) и нажимаем Enter 4. Получаем вышеописанную ошибку 5. Тоже самое происходит в любом другом поле при указании или выборе более одного значения для фильтрации На версии EhLib 9.4.022 всё работало. Исправьте, пожалуйста. |
Автор: | EhLibSupport [ 30 июн 2020, 15:44 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. Ошибку исправим в следующей сборке. Спасибо за информацию. |
Автор: | ADSoft [ 14 июл 2020, 08:05 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. Спасибо, работает. |
Автор: | ADSoft [ 24 июл 2020, 11:29 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Рано обрадовался Всё замечательно работает, но только для TADOQuery. Стоит только его заменить на TADODataSet, так выскакивает та же самая ошибка. Решается добавлением в секцию initialization EhLibADO следующей строки: RegisterDatasetFeaturesEh(TADOSQLDatasetFeaturesEh, TADODataSet); Исправьте, пожалуйста, в следующей сборке. Заранее, спасибо! p.s. для TADOStoredProc и TADOTable та же картина |
Автор: | ADSoft [ 28 июл 2020, 15:27 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Ну, и чтобы, как говориться, два раза не вставать, поправьте, пожалуйста, давний баг со смешанным фильтром в EhLibADO (т.е. множественным и одинарным или множественным и множественным в разных полях). Как воспроизвести: 1. Запускаем пример Demos\DBGridEh.SortNFilter.ADOQuery\Project1.dpr 2. Нажимаем на кнопку "Filter is on Server", после чего надпись на ней изменяется на "Filter is on Client" 3. В сетке в стоке фильтра в поле "CustNo" вводим "=9" (без двойных кавычек) и нажимаем Enter 4. Всё отлично фильтруется 5. В сетке в стоке фильтра в поле "OrderNo" вводим "in(209,7)" (без двойных кавычек) и нажимаем Enter 6. Получаем вышеописанную ошибку Это происходит из-за особенностей фильтрации набора данных в ADO, который наглядно описан здесь. Вот выдержка из вышеуказанной статьи: * Приоритет между AND и OR не существует. Предложения могут быть сгруппированы в круглые скобки. Однако нельзя сгруппировать предложения, соединенные OR, а затем объединить группу с другим предложением с оператором AND, как в следующем фрагменте кода: (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John' * Вместо этого этот фильтр следует создать так: (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John') Т.к. баг давний (точнее изначальный), то исправьте, пожалуйста, сначала баг с TADODataSet, описанный постом выше, а потом, если будет время, то и этот. Заранее, спасибо! |
Автор: | ADSoft [ 06 авг 2020, 11:53 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Версия 9.5.024 - воз поныне там ... Исправьте, хотя бы, множественную фильтрацию в TADODataSet, пожалуйста! |
Автор: | ADSoft [ 10 авг 2020, 13:26 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Большое спасибо! В версии 9.5.026 баг с множественной фильтрацией в одной колонке для TADODataSet, TADOTable и TADOStoredProc исправлен! Остался баг со смешанной фильтрацией, но, как я и писал выше, он древний. Если(когда) руки дойдут, пожалуйста, сообщите в данной ветке. Заранее, спасибо! |
Автор: | ADSoft [ 30 дек 2020, 12:11 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Стесняюсь спросить, а проблема со смешанной фильтрацией в ADO, описанная выше, стоит на повестке (дня, недели, месяца, года ...)? Заранее, спасибо! |
Автор: | EhLibSupport [ 17 янв 2021, 02:22 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. В сборке EhLib.VCL 10.0 Build 10.0.030 добавили возможность фильтрации SFTilter через событие TDataSet.OnFilterRecord в обход свойства TDataSet.Filter. Пока в эксперементальном режиме. Новый вид фильтрации не должен зависет от особенностей работы свойства TDataSet.Filter в разных ДатаСетах. Для активизации и проверки данной возможности необходимо в модуле EhLibADO раскомментировать строку //Result := lfawEventFilterEh; в function TADOSQLDatasetFeaturesEh.GetLocalFilterApplyingWay: TLocalFilterApplyingWayEh; и function TADOCommandTextDatasetFeaturesEh.GetLocalFilterApplyingWay: TLocalFilterApplyingWayEh; |
Автор: | ADSoft [ 17 янв 2021, 13:20 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. Да, в 10.0.030 при //Result := inherited GetLocalFilterApplyingWay; Result := lfawEventFilterEh; выше описанный случай работает, спасибо! Но, перестаёт работать локальный фильтр в подставляемом поле CustNameLookup. Если в данном поле в строке фильтра ввести, например, ='Unisco' и применить фильтр (или выбрать Unisco из выпадающего списка), то выходит ошибка 'Не могу преобразовать вариант типа (String) в тип (Double)'. Если вернуть Result := inherited GetLocalFilterApplyingWay; //Result := lfawEventFilterEh; то, соответственно, всё как раньше и в CustNameLookup фильтр работает. Поправьте, пожалуйста и, думаю, в EhLibADO Result := lfawEventFilterEh можно будет включить по умолчанию. Заранее, спасибо! |
Автор: | ADSoft [ 16 фев 2021, 08:40 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. В 10.0.031 всё работает. Спасибо! |
Автор: | ADSoft [ 19 апр 2021, 12:48 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. Ещё один вопрос, если можно. Раньше для своих нужд, при Result := inherited GetLocalFilterApplyingWay, я перекрывал TADODataSet.SetFilterText. Теперь, при Result := lfawEventFilterEh, отладчик туда не заходит. Отсюда вопрос - что и где теперь можно перекрыть, чтобы настроить фильтрацию под свои нужды (например, заменить * на %)? Заранее, спасибо за ответ! |
Автор: | EhLibSupport [ 24 апр 2021, 23:50 ] |
Заголовок сообщения: | Re: Ошибка при множественном локальном фильтре в EhLibADO |
Добрый день. Добавили подобную возможность в сборку EhLib.VCL 10.0 Build 10.0.035. Для смены символа подстановки фильтра используйте виртуальные методы Код: function CustomFilterSingleCharWildcard: String; virtual; //SingleChar Wildcard function CustomFilterMultipleCharsWildcard: String; virtual; //MultipleChar Wildcard класса TDatasetFeaturesEh Пример реализации изменения символов подстановки приведен ниже: Код: ...
type TMyADOSQLDatasetFeaturesEh = class(TADOSQLDatasetFeaturesEh) function CustomFilterSingleCharWildcard: String; override; function CustomFilterMultipleCharsWildcard: String; override; end; { TMyADOSQLDatasetFeaturesEh } function TMyADOSQLDatasetFeaturesEh.CustomFilterMultipleCharsWildcard: String; begin Result := '*'; end; function TMyADOSQLDatasetFeaturesEh.CustomFilterSingleCharWildcard: String; begin Result := '?'; end; ... initialization RegisterDatasetFeaturesEh(TMyADOSQLDatasetFeaturesEh, TADOTable); end. |
Страница 1 из 1 | Часовой пояс: UTC |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |