Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Like и метасимволы в эдит


Автор: Лиходей 18.2.2009, 19:17
БД Access, доступ  Ado.

Поясните пожалуйста, почему, при строке фильтра которая имеет вид

Код

filtеr:= 'NAME LIKE '+  #39 + edtName.Text +  #39;


и при тексте эдита '%ася', все работает как положено, ищются Васи, аси...
А при тексте 'В%я', никаких данных не найдено.

И еще один вопрос: 
текст едита  '_ся' и '%ся'  дают одинаковый результат, 
т.е. в первом случае как и во втором заменяется не один символ, а несколько.




Автор: Kbl4AH 18.2.2009, 19:46
Цитата(Лиходей @  18.2.2009,  19:17 Найти цитируемый пост)
А при тексте 'В%я', никаких данных не найдено.

, при учете того, что
Цитата(Лиходей @  18.2.2009,  19:17 Найти цитируемый пост)
и при тексте эдита '%ася', все работает как положено, ищются Васи, аси...

- ГОН!!!
Цитата(Лиходей @  18.2.2009,  19:17 Найти цитируемый пост)
текст едита  '_ся' и '%ся'  дают одинаковый результат, т.е. в первом случае как и во втором заменяется не один символ, а несколько.

Тоже ГОН!!!
Может у тебя с регистрами путаница? Что возможно... приведи поле к определенному регистру и указывай в like в таком же...
ЗЫ. Чтобы не быть голословным проверил это запросами из таблицы...
Не поленился и вставил Асю и Васю...
Код

select distinct name from card t where name like '%ся' ;

Алеся, Ася, Вася, Олеся
Код

select distinct name from card t where name like 'В%ся' ;

Вася
Код

select distinct name from card t where name like '_ся' ;

Ася
Код

select distinct name from card t where name like '%ся' ;

Алеся, Ася, Вася, Олеся

Автор: Лиходей 18.2.2009, 20:26
Если это гон, то зачем бы я морочил голову и себе и людям?

Я серьезно говорю, если метасимволы стоят вначале или в конце строки, то все работает,
если в середине нет.

Сам удивлен, поэтому и прошу объяснить, что к чему... Может у кого-то было такое.

С регистром все впорядке, в базе все данные в верхнем регистре, и в эдите CharCase = UpperCase.

    

Автор: Лиходей 23.2.2009, 19:26
Наверное кокой-то трабл в TADOTable... Фильтрация работает не корректно, если метасимволы стоят в середине строки...

Если использовать ADOQuery с запросами таким как предлагал Kbl4AH, все работает.






Автор: Hexel 23.2.2009, 22:01
Попробуй перефразировать
Код

filtеr:= 'NAME LIKE ''' + edtName.Text +  '''';


там каждая одинарная кавычка внутри строки записывается двумя сразу - таким я пользуюсь каждый день
или еже как вариант - QuotedString или как его...

Автор: Данкинг 23.2.2009, 22:02
Какой фильтр вообще, запросом не проще? 

Автор: Kbl4AH 24.2.2009, 00:13
Hexel, 
Код

'''' = #39

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)