![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
О фильтре
Дева © (2005-11-18 19:57:00)Подскажите, пожалуйста, возможно ли организовать фильтр к данным прямо в DBGid, чтобы не использовать снова запрос? А вдруг :)
Virgo_Style (2005-11-20 16:09:00) [1]Дева © (20.11.05 16:02) [22]
NewFilter - это условие, которое мы хотим наложить:
...
NewFilter:='('+NewFilter+')';
with ADOQuery1 do
if Filter>'' then Filter:=Filter+' AND '+NewFilter else Filter:=NewFilter;
Дева (2005-11-20 16:02:00) [2]Virgo_Style, keyword AND - что ты имешь ввиду?
Я использую метод ADOQuery1.Filter. После этого, если использовать еще раз, то фильтруются все записи из ADOQuery1. Можно ли фильтровать те записи, которые уже отфильтрованны? То есть сохранять прошлую фильтрацию?
Virgo_Style (2005-11-20 15:19:00) [3]Дева © (20.11.05 13:42) [20]
Что значит - уже отфильтрованные? Наложение фильтров? Есть такой keywordAND.
Дева (2005-11-20 13:42:00) [4]Возможно ли фильтровать отфтльтрованные уже данные?
Через ADOQuery1.Filter?
?????????????????????????????
Virgo_Style (2005-11-20 09:05:00) [5]Virgo_Style © (20.11.05 8:58) [18]
Ну вот, не поленился, проверил %-) Работает, только после изменения фильтра надо его применить (может быть, надо не так, лень искать - но работает):
ADOQuery1.Filtred:=false;
ADOQuery1.Filtred:=true;
Virgo_Style (2005-11-20 08:58:00) [6]Дева © (19.11.05 23:35) [16]
я OnFilterRecord не использовал, но на беглый взгляд вот так
uses Masks
procedure TForm1.DataSetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := MatchesMask(DataSet[FieldNameEdit.Text], MaskEdit.Text);
end;
должно получиться.
MatchesMask подерживает *, ? и еще некоторые вещи, в справке написано.
Дева (2005-11-20 02:13:00) [7]Как фильтровать отфтльтрованные уже данные?
Через ADOQuery1.Filter?
Дева (2005-11-19 23:35:00) [8]Virgo_Style, не поняла, как использовать MatchesMask?
Virgo_Style (2005-11-19 21:11:00) [9]sniknik © (19.11.05 20:48) [14]
Действительно... а если еще и MatchesMask использовать, то похоже, проблема решится буквально в одну строку...
sniknik (2005-11-19 20:48:00) [10]> Видимо, без переоткрытия запроса все же никак.
есть еще событие OnFilterRecord...
Virgo_Style (2005-11-19 19:31:00) [11]Почему?
Похоже, у Like в Filter довольно своеобразная реализация... Работает только в виде <маска>% и <маска>_, причем количество символов никак не учитывает... Видимо, без переоткрытия запроса все же никак.
Дева (2005-11-19 18:38:00) [12]Virgo_Style
Спасибо, работает. Только возникла одна проблема
s:= Edit1.Text+' Like '''+Edit2.Text+'''';
ADOQuery1.Filter:=s;
ADOQuery1.Filtered:=true;
Если в поле Edit2 ввести < А_БББ>
то будет искать А_БББ, а не АББББ, ААБББ, АВБББ и т. д. Почему?
sniknik (2005-11-19 12:52:00) [13]
ADOQuery1.Filter:=('name=а*');
ADOQuery1.FilterOptions:=[foCaseInsensitive];
ADOQuery1.Filtered:=true;
вместо этого должно быть
ADODataSet1.Filter:= 'name LIKE ''а%''';
ADODataSet1.Filtered:=true;
> FilterOption are not supported
> С чем это может быть связано?
с тем что не поддерживается... ясно же написано.
Virgo_Style (2005-11-19 12:50:00) [14]Virgo_Style © (19.11.05 12:42) [9]
Причем работает именно "Case Insensitive".
Virgo_Style (2005-11-19 12:42:00) [15]Так, а какая база и Data Provider?
у меня Access + Jet, и вот так - работает:
ADOQuery1.Filter:=Edit1.Text;
ADOQuery1.Filtered:=true;
, где Edit1.Text = <Field1 LIKE 'Ива%'> (специально рисую угловые скобки, чтобы не потерялись кавычки).
Дева (2005-11-19 11:59:00) [16]Virgo_Style, то есть не сортировки, а фильтрации... У меня от о почти суточного программирования голова кругом идет
Вот что я нарыла у себя в справке:
FilterOptions - свойство TDataSet
Описание
Свойство FilterOptions определяет опции фильтрации. Сама фильтрация задается свойствами Filter, Filtered, а устанавливает чувствительность фильтрации к регистру и допустимость частичного совпадения при сравнении.
FilterOptions представляет собой множество следующих опций:
foCaseInsensitive Учет регистра при сравнении строк
.............
просто применить верно не получается
ADOQuery1.FilterOptions:=[foCaseInsensitive];
наверное синтаксис должен быть другой...
Virgo_Style (2005-11-19 11:49:00) [17]Дева © (19.11.05 0:38) [5]
ADOQuery1.Filter:=('name=а*');
кусочек из справки про Filter:
* Multiplies two numbers (only available for some drivers)
Видимо, маски в Filter не поддерживаются, во всяком случае - звездочка. Кстати, строки неплохо бы в кавычки заключать:'name='+QuotedString(s);или что-то вроде того.
А зачем (и как?) для сортировки -Filter? У TADODataSet, например, есть для этогоSort
Дева (2005-11-19 11:33:00) [18]Ну подскажите, ну кто-нибудь! в справке об этом ничего нет!
Дева (2005-11-19 00:38:00) [19]To Virgo_StyleДа, но Like - это SQL, а я хотела сортировку к Query организовать
Я нашла в справке, и вот что у меня получилось:
ADOQuery1.Filter:=('name=а*');
ADOQuery1.FilterOptions:=[foCaseInsensitive];
ADOQuery1.Filtered:=true;
Приложение компилируется, но когда выполняется процедура, содержащая этот код, выдается ошибка:
FilterOption are not supported
С чем это может быть связано?
Virgo_Style (2005-11-18 22:57:00) [20]Вероятно, надо смотреть в сторону Like:
Name LIKE <шаблон>.
Как задается шаблон, я, честно говоря, не помню, это должно быть в справке к базе.