Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.194 c
15-1158323624
AlexeyT
2006-09-15 16:33
2006.10.08
Какой компонент для Shell Notification посоветуете?


3-1154527729
Scorpio
2006-08-02 18:08
2006.10.08
Получение номера из БД в программу


3-1154501115
spogi
2006-08-02 10:45
2006.10.08
Is not a valid floating point value


2-1158774901
KEBZ
2006-09-20 21:55
2006.10.08
Корректный ввод


15-1158341679
DillerXX
2006-09-15 21:34
2006.10.08
Дневной по СТС идёт....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский