Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Фильтровать базу данных по куску слова   Найти похожие ветки 

 
Juri   (2006-09-16 02:37) [0]

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

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-16 09:37) [1]

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

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

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


 
Chort ©   (2006-09-16 12:20) [2]

Пробуй так(фильтр в двух вариантах)
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;


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


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

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


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

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


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


> Пробуй так(фильтр в двух вариантах)
> 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 базе данных этот символ не проходит...


 
Virgo_Style ©   (2006-09-16 19:32) [5]


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 22:31) [6]


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 22:39) [7]

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


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

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


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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
15-1158487787
ArtemESC
2006-09-17 14:09
2006.10.08
Полином


2-1158403002
Id
2006-09-16 14:36
2006.10.08
Динамический запуск формы


1-1156979593
Dreamse
2006-08-31 03:13
2006.10.08
Компонент - Калькулятор с привязкой к TEdit


15-1158643332
Ega23
2006-09-19 09:22
2006.10.08
С Днём рождения! 19 сентября


1-1156160268
alexaken
2006-08-21 15:37
2006.10.08
Компонент меню как в Office 2003 для BDS 2006 VCL