Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фильтровать базу данных по куску слова [D7, XP]


Juri ©   (2006-09-16 02:37:00) 

Доброго времени суток ув. мастера!
пробую профильтровать свою базу данных по куску фамилии напрмер пишу в едите "ов" надо чтоб все фамилии были в которых есть эти две буквы ппричём не важно где они находятся в конуе или в начале!
я делаю так

s:=Edit1.Text;
Table1.Filter:='WANN='+edit2.Text+s+'*'+Edit2.Text;

Edit1 поле для ввода символов по которым нужно провести фильтрацию
Edit2 содержит символ '  так как програмно добавить я его как то не могу делфи его в коде сами знаете принимает за начало или конец типа String
вобщем когда я делаю так естественно работает всё НО фильтр показывает мне только то что начинается на "ов"
делаю следующее

s:=Edit1.Text;
Table1.Filter:='WANN='+edit2.Text+'*'+s+'*'+Edit2.Text;

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


Virgo_Style   (2006-09-17 00:27:00) [1]

Значит, ИИ все же существует, ибо очевидно, что для не наделенного ИИ компьютера кусочек слова и слово целиком не отличаются абсолютно ничем при поиске таковых в строке.

Отладчик в помощь, что тут еще можно сказать.


Juri   (2006-09-17 00:09:00) [2]

я помойму уж подробно описал что мне нужно и что не работает да и объяснять то нечего просто не фильтрует по кучочку из слова!


Juri   (2006-09-16 22:43:00) [3]

ну не работает в том смысле что вообще не фильтрует никак
тока фильтрует если точно слово всё написать тогда находит а по кусочку нет


Virgo_Style   (2006-09-16 22:39:00) [4]

*мечтательно* ...а как чудесно было бы не допускать отправления ответа вида "выкидывает ошибку" и "не работает", пока не будет описана проблема... Эх, где ты, ИИ...


Juri   (2006-09-16 22:31:00) [5]


procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
Accept := MatchesMask( DataSet.FieldByName('NAME').AsString , '*'+s+'*' );
end;

ну вот так я сделал тока опять не работает...

PS: у меня работа с DBF а не ADO


Virgo_Style   (2006-09-16 19:32:00) [6]


uses Masks;

procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin

 Accept := MatchesMask( DataSet.FieldByName('Имя').AsString , '*Пупкин' )
          and DataSet.FieldByName('Тот_самый').AsBoolean;

end;


Фильтр пропустит всех, у кого имя соответствует "...Пупкин", для которых установлен флаг "Тот_самый". Подробности масок - в хелпе.


Juri   (2006-09-16 19:30:00) [7]


> Пробуй так(фильтр в двух вариантах)
> function TForm1.GetFilterString: string;
> begin
>  result:='';
>  if DiscsTable.FieldByName('id').AsInteger<>ALL_DISCS_ID
> then begin
>    result:='Dcs='+ DiscsTable.FieldByName('id').AsString
>  end;
>
>  if (FilterEd.Text<>'') and (ActFilterOn.Checked) then begin
>    if result<>'' then result:=result+' AND ';
>    result:=result+'Name' + QuotedStr('%'+FilterEd.Text+'%');
>
>  end;
> end;
> Так было у меня, а у себя уж сам переделай поля.
> для вызова
> ADOTable.Filter:=GetFilterString;

я так понял что это работает по той же системе как и я делал просто вместо * используется % НО в DBF базе данных этот символ не проходит...


Juri   (2006-09-16 18:56:00) [8]


> p.s. О символе ' :
>
> Label1.Caption:='''В кавычках'''+' Тут-> ''  одна кавычка,
>  тут '+#39+' еще одна' ;

огромное спасибо за совет


> сделать фильтрацию в OnFilterRecord (напр. с использованием
> MatchesMask)

можно пример и возможно ли это использовать если фильтр не только по одному полю а к примеру и ещё и по полю с датой о рождении


Chort   (2006-09-16 12:20:00) [9]

Пробуй так(фильтр в двух вариантах)
function TForm1.GetFilterString: string;
begin
 result:='';
 if DiscsTable.FieldByName('id').AsInteger<>ALL_DISCS_ID then begin
   result:='Dcs='+ DiscsTable.FieldByName('id').AsString
 end;

 if (FilterEd.Text<>'') and (ActFilterOn.Checked) then begin
   if result<>'' then result:=result+' AND ';
   result:=result+'Name' + QuotedStr('%'+FilterEd.Text+'%');
 end;
end;

Так было у меня, а у себя уж сам переделай поля.
для вызова
ADOTable.Filter:=GetFilterString;


Virgo_Style   (2006-09-16 09:37:00) [10]

- сделать фильтрацию в OnFilterRecord (напр. с использованием MatchesMask)
- использовать Like (не знаю, работает ли он в Filter, думаю, что нет)

p.s. О символе ' :

Label1.Caption:= '''В кавычках '''+' Тут-> '' одна кавычка, тут '+ #39+' еще одна' ;


Наверх

Титульная страница Поиск, карта сайта Написать письмо