procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet); var dbSL, findSL: TStringList; i: integer; isOK: boolean; filterStr: string; const ORstr: array[boolean] of string = (' OR ', ''); begin dbSL := TStringList.Create; try dbSL.Delimiter := ','; dbSL.DelimitedText := DBEdit2.Text; findSL := TStringList.Create; findSL.Duplicates := dupIgnore; isOK := true; for i := 0 to dbSL.Count - 1 do begin if SL.IndexOf(dbSL.Strings[i]) > -1 then begin isOk := false; findSL.Add(dbSL.Strings[i]); // Дубликаты игнорируются end; end; if isOK then begin for i := 0 to dbSL.Count - 1 do begin SL.Add(dbSL.Strings[i]); end; end else begin filterStr := ''; for i := 0 to findSL.Count - 1 do begin filterStr := filterStr + ORstr[i = 0] + '([txt] LIKE *' + findSL.Strings[i] + '*) '; end; DataSet.Cancel; ADOTable1.Filtered := False; ADOTable1.Filter := filterStr; ADOTable1.Filtered := True; Abort; end; finally dbSL.Free; findSL.Free; end; end;