Для формирования строки фильтра использую такой велосипед.
const
Condition = '%s = ''%s''';
begin
Filter := '';
for i := 0 to ComponentCount - 1 do begin
if Components[i] is TCombobox then
begin
EditControl := TCombobox(Components[i]);
if EditControl.Text = '' then Continue;
if Filter = ''
then Filter := Format(Condition, [EditControl.Name, IntToStr(integer(EditControl.Items.Objects[EditControl.ItemIndex]))])
else Filter := Filter + ' and ' + Format(Condition, [EditControl.Name, IntToStr(integer(EditControl.Items.Objects[EditControl.ItemIndex]))]);
end;
end;
Нюанс в том что компоненты необходимо называть аналогично полям в выборке, не очень утобно для читаемоски в коде.
Можно придумать ненапряжное в реализации что-то типа словаря название компонента= поле в выборке.?