Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2010, 16:54   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию фильтрация по части слова

привет!
вопрос таков - как сделать фильтр по части слова в ehlib?
kate158 вне форума Ответить с цитированием
Старый 07.09.2010, 16:57   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

если это связано с БД то sql-евский LIKE вам в помощь
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 07.09.2010, 17:08   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

насчет like все ясно, но как переделать имеющуюся фильтрацию в ehlib?
kate158 вне форума Ответить с цитированием
Старый 07.09.2010, 17:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как понять твои слова?
EhLib это библиотека, в нее нельзя передать такое.
И почему тебе не использовать SQL запросы? Компоненты вообще-то не очень хорошо работают с фильтрацией
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2010, 17:18   #5
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Stilet,Mad_Cat, правильно ли я понимаю: фильтрацию вы предлагаете сделать с помощью edit полей и нажатия какой нить кнопки "выполнить"?
kate158 вне форума Ответить с цитированием
Старый 07.09.2010, 19:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Катенька, рекомендую посмотреть в сторону события OnFilterRecord (у Dataset'а есть такое событие)
в нём Вы можете проверять текущую запись на что угодно - и выставлять признак, отображать эту запись или нет...

p.s. не факт, что на больших объёмах это будет очень быстро...


________

Добавлено

А ещё можно использовать LIKE в фильтрации:
Пусть наш запрос находится в DataSet с именем AdoQuery2
Кидаем на форму TEdit с именем edFilterName
и чек-бок (включать/выключать фильтрацию) с именем cbNameLikeFilterOn
на собития OnClick чекбокса и OnChange поля edit назначаем один и тот же код.
Код:
procedure TForm1.FilterNomer;
begin
  if cbNameLikeFilterOn.Checked
       and (Trim(edFilterName.Text)<>'')  then begin
    AdoQuery2.Filtered := false;
    AdoQuery2.Filter := ' nomer Like '+ QuotedStr('*'+Trim(edFilterName.Text)+'*');
    AdoQuery2.Filtered := true;
  end
  else begin
    AdoQuery2.Filtered := false;
  end;
  laCount.Caption := 'Количество записей: '+
     IntToStr(ADOQuery2.RecordCount);
end;

Последний раз редактировалось Serge_Bliznykov; 07.09.2010 в 20:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2010, 10:20   #7
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

ОК.Сергей, все ясно.
что делать, в случае, если я хочу по одному edit полю фильтровать 3 столбца в таблице - по фамилии,или по имени или по отчеству?

Последний раз редактировалось kate158; 08.09.2010 в 10:23.
kate158 вне форума Ответить с цитированием
Старый 08.09.2010, 10:23   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Filter:='[Фамилия] like '+QuotedStr('%'+Edit1.Text+'%')
+' AND '+[Имя] like '+QuotedStr('%'+Edit1.Text+'%')
+' AND '+[Отчество] like '+QuotedStr('%'+Edit1.Text+'%');
Но ИМХО лучше доверить это SQL запросу а не компонентам Борланда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2010, 10:30   #9
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Код:
dm.people.Filter := 'name Like '+ QuotedStr('*'+Trim(edFilterName.Text)+'*'
+'or SECOND_name Like '+ QuotedStr('*'+Trim(edFilterName.Text)+'*'));
ошибка "аргументы имеют неверный тип,выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"

т.е. нужно в одном поле искать либо имя, либо фамилию.
допустим пользователь знает либо только имя, либо только фамиилию

Последний раз редактировалось kate158; 08.09.2010 в 10:49.
kate158 вне форума Ответить с цитированием
Старый 08.09.2010, 10:51   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Если Вы обратите внимание, то у меня специально добавлена проверка на НЕ ПУСТОТУ поля со значением!

И со скобками напутали.
Где закрывающая скобка первого QuotedStr ??!!

а ещё пробел перед OR явно не помешает!

Попробуйте так:
Код:
if Trim(edFilterName.Text)<>'' then
  dm.people.Filter := 'name Like '+ QuotedStr('*'+Trim(edFilterName.Text)+'*')
+' or SECOND_name Like '+ QuotedStr('*'+Trim(edFilterName.Text)+'*');

Последний раз редактировалось Serge_Bliznykov; 08.09.2010 в 10:54.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбить текст на слова и произвести поиск каждого слова по текстовому массиву Burning_brook Microsoft Office Excel 2 22.05.2010 01:56
Поиск по части слова (для ВПР) WIC Microsoft Office Excel 4 08.01.2010 14:14
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47
поиск слова по его части Рустам Помощь студентам 3 10.03.2009 20:54
Подсветка части слова в grid-е. _SERGEYX_ БД в Delphi 2 14.01.2009 12:57