Не работает фильтр

здравствуйте. не могу настроить фильтр таблицы в базе, чтобы искались и отображались строки по определенным параметрам вот код
procedure TSDIAppForm.Button3Click(Sender: TObject);
var s,v: string;
begin
if RadioGroup1.ItemIndex = 0 then s:= 'BOOKAUTHOR';
if RadioGroup1.ItemIndex = 1 then s:= 'BOOKNAME';

if DataModule1.Books_table.Locate(s, quotedstr(Edit3.Text),[loCaseInsensitive])
then
begin
DataModule1.Books_table.filtered:=false;
if RadioGroup1.ItemIndex = 0 then DataModule1.Books_table.filter:='BOOKAUTHOR= '+Edit3.Text;
if RadioGroup1.ItemIndex = 1 then DataModule1.Books_table.filter:='BOOKNAME= '+Edit3.Text;
DataModule1.Books_table.filtered:=true;
ShowMessage('Поиск успешно завершен.') ;
end
else
 begin
 if RadioGroup1.ItemIndex = 0 then ShowMessage('Книги искомого автора не найдены!');
 if RadioGroup1.ItemIndex = 1 then ShowMessage('Искомая книга не найдена!');
 end;
end;
пожалуйста помогите найти ошибку.буду очень признателенУ нас принято оформлять код специальным тэгом - кнопочка "#". Модератор
7 ответов

QuotedStr(Edit3.Text) везде нужно. И в фильтре тоже.


добавлял QuotedStr(Edit3.Text) везде, все равно фильтр не работает. выдает сообщение 'Книги искомого автора не найдены!' или 'Искомая книга не найдена!' а при пустом Edit3 пишет эПоиск успешно завершен.', но результата не выдает


То есть Locate не выполняется. Вы уверены, что вам нужен параметр [loCaseInsensitive] ? Попробуйте []. Хотя, может быть и нужен.И уберите строку
DataModule1.Books_table.filtered:=false;
Она лишняя.Попробуйте подставить вместо S в Locate имя поля. Я не уверен, что там можно использовать переменную.З.Ы. Проверил, можно использовать переменную.


попробовал, все равно фильтр не работает. что самое интересное в этом же проекте другой фильтр, написаный примерно так же работает (там я тоже в Locate использую переменную).


Чудеса... Попробуйте другой алгоритм. Устанавливайте фильтр (без Locate - его не будем использовать). И смотрите количество отфильтрованных записей. 0 - не найдено, >0 - найдено...


большое спасибо


Мне кажется в этой строке:
if DataModule1.Books_table.Locate(s, quotedstr(Edit3.Text),[loCaseInsensitive])
quotedstr был лишним, если конечно у тебя данные не храняться в таблице с апострофами.