![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтровать базу данных по куску слова [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+' еще одна' ;