Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 29 мар 2024, 07:04

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: 30 июн 2020, 08:53 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Добрый день.

На всех версиях 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 всё работало.
Исправьте, пожалуйста.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 июн 2020, 15:44 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Ошибку исправим в следующей сборке.
Спасибо за информацию.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 июл 2020, 08:05 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Добрый день.

Спасибо, работает.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 июл 2020, 11:29 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Рано обрадовался :(
Всё замечательно работает, но только для TADOQuery. Стоит только его заменить на TADODataSet, так выскакивает та же самая ошибка.
Решается добавлением в секцию initialization EhLibADO следующей строки:
RegisterDatasetFeaturesEh(TADOSQLDatasetFeaturesEh, TADODataSet);
Исправьте, пожалуйста, в следующей сборке.
Заранее, спасибо!

p.s. для TADOStoredProc и TADOTable та же картина


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 июл 2020, 15:27 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Ну, и чтобы, как говориться, два раза не вставать, поправьте, пожалуйста, давний баг со смешанным фильтром в 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, описанный постом выше, а потом, если будет время, то и этот.
Заранее, спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 авг 2020, 11:53 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Версия 9.5.024 - воз поныне там ...
Исправьте, хотя бы, множественную фильтрацию в TADODataSet, пожалуйста!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 авг 2020, 13:26 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Большое спасибо!
В версии 9.5.026 баг с множественной фильтрацией в одной колонке для TADODataSet, TADOTable и TADOStoredProc исправлен!
Остался баг со смешанной фильтрацией, но, как я и писал выше, он древний. Если(когда) руки дойдут, пожалуйста, сообщите в данной ветке.
Заранее, спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 дек 2020, 12:11 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Стесняюсь спросить, а проблема со смешанной фильтрацией в ADO, описанная выше, стоит на повестке (дня, недели, месяца, года ...)?
Заранее, спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 янв 2021, 02:22 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

В сборке 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;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 янв 2021, 13:20 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Добрый день.

Да, в 10.0.030 при
//Result := inherited GetLocalFilterApplyingWay;
Result := lfawEventFilterEh;
выше описанный случай работает, спасибо!
Но, перестаёт работать локальный фильтр в подставляемом поле CustNameLookup.
Если в данном поле в строке фильтра ввести, например, ='Unisco' и применить фильтр (или выбрать Unisco из выпадающего списка), то выходит ошибка 'Не могу преобразовать вариант типа (String) в тип (Double)'.
Если вернуть
Result := inherited GetLocalFilterApplyingWay;
//Result := lfawEventFilterEh;
то, соответственно, всё как раньше и в CustNameLookup фильтр работает.
Поправьте, пожалуйста и, думаю, в EhLibADO Result := lfawEventFilterEh можно будет включить по умолчанию.

Заранее, спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 фев 2021, 08:40 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Добрый день.

В 10.0.031 всё работает.

Спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 апр 2021, 12:48 
Не в сети

Зарегистрирован: 28 июл 2012, 18:07
Сообщений: 43
Добрый день.

Ещё один вопрос, если можно.
Раньше для своих нужд, при Result := inherited GetLocalFilterApplyingWay, я перекрывал TADODataSet.SetFilterText.
Теперь, при Result := lfawEventFilterEh, отладчик туда не заходит.
Отсюда вопрос - что и где теперь можно перекрыть, чтобы настроить фильтрацию под свои нужды (например, заменить * на %)?

Заранее, спасибо за ответ!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 апр 2021, 23:50 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Добавили подобную возможность в сборку 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.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB