Показать сообщение отдельно
  #11  
Старый 25.05.2015, 22:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да нет тут проблемы, только чьи то кривые руки.
Даже твой исхожник лень смотреть. Ну сделай на OnFilterRecord прямо в динамике.

Кладешь n Edit'ов (в данном примере - 4) на, например, ToolBar. Каждый Edit отвечает за фильтрацию по своему полю (если все фильрты по одному полю, то чуть-чуть по другому надо логику прописать, но принцип тот же самый).
Далее в OnFilterRecord соотв. компонента делаем примерно так (OR):
Код:
var
  Result : Boolean;
begin
  Result := False;
  If Edit1.Text <> '' Then Result := Result Or query.FieldByName('Field1').AsString = Edit1.Text; // если надо полное совпадение
  If Edit2.Text <> '' Then Result := Result Or (AnsiCompareText(query.FieldByName('Field2').AsString,Edit2.Text)=0); // если надо совпадение без учета регистра
  If Edit3.Text <> '' Then Result := Result Or (Pos(Edit3.Text,query.FieldByName('Field3').AsString) > 0);// если надо точное наличие подстроки в любом месте
  If Edit4.Text <> '' Then Result := Result Or (Pos(Edit4.Text,query.FieldByName('Field4').AsString) = 1);// если надо что бы начиналось с подстроки
Далее просто возвращаешь значение, накопленное в Result.
Ответить с цитированием