Текущий архив: 2005.12.04;
Скачать: CL | DM;
Вниз
О фильтре Найти похожие ветки
← →
Дева © (2005-11-18 19:57) [0]Подскажите, пожалуйста, возможно ли организовать фильтр к данным прямо в DBGid, чтобы не использовать снова запрос? А вдруг :)
← →
Separator © (2005-11-18 20:09) [1]Знаю что можно, но не знаю как, ни когда не пользовался. Всегда сам выбераю что мне выводит в грид и в какой форме и сам обрабатываю все изменения
← →
Virgo_Style © (2005-11-18 20:54) [2]см. DataSet.Filter; подсказка - наследники DataSet - это разнообразные Table, Query и так далее. Данные находятся в DataSet"ах, а DBGrid служит только для их отображения.
← →
Дева © (2005-11-18 22:22) [3]Спасибо Virgo_Style, это я уже поняла. Не могу разобраться с тем, какой синтаксис у FilterOptions
При фильтрации:ADOQuery1.Filter:=("name=a*");
необходимо, чтобы звездочка "*" соответсвовала шаблону.
← →
Virgo_Style © (2005-11-18 22:57) [4]Вероятно, надо смотреть в сторону Like:
Name LIKE <шаблон>
.
Как задается шаблон, я, честно говоря, не помню, это должно быть в справке к базе.
← →
Дева © (2005-11-19 00:38) [5]To Virgo_Style Да, но Like - это SQL, а я хотела сортировку к Query организовать
Я нашла в справке, и вот что у меня получилось:ADOQuery1.Filter:=("name=а*");
ADOQuery1.FilterOptions:=[foCaseInsensitive];
ADOQuery1.Filtered:=true;
Приложение компилируется, но когда выполняется процедура, содержащая этот код, выдается ошибка:
FilterOption are not supported
С чем это может быть связано?
← →
Дева © (2005-11-19 11:33) [6]Ну подскажите, ну кто-нибудь! в справке об этом ничего нет!
← →
Virgo_Style © (2005-11-19 11:49) [7]Дева © (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:59) [8]Virgo_Style, то есть не сортировки, а фильтрации... У меня от о почти суточного программирования голова кругом идет
Вот что я нарыла у себя в справке:
FilterOptions - свойство TDataSet
Описание
Свойство FilterOptions определяет опции фильтрации. Сама фильтрация задается свойствами Filter, Filtered, а устанавливает чувствительность фильтрации к регистру и допустимость частичного совпадения при сравнении.
FilterOptions представляет собой множество следующих опций:
foCaseInsensitive Учет регистра при сравнении строк
.............
просто применить верно не получается
ADOQuery1.FilterOptions:=[foCaseInsensitive];
наверное синтаксис должен быть другой...
← →
Virgo_Style © (2005-11-19 12:42) [9]Так, а какая база и Data Provider?
у меня Access + Jet, и вот так - работает:ADOQuery1.Filter:=Edit1.Text;
ADOQuery1.Filtered:=true;
, где Edit1.Text = <Field1 LIKE "Ива%"
> (специально рисую угловые скобки, чтобы не потерялись кавычки).
← →
Virgo_Style © (2005-11-19 12:50) [10]Virgo_Style © (19.11.05 12:42) [9]
Причем работает именно "Case Insensitive".
← →
sniknik © (2005-11-19 12:52) [11]
ADOQuery1.Filter:=("name=а*");
ADOQuery1.FilterOptions:=[foCaseInsensitive];
ADOQuery1.Filtered:=true;
вместо этого должно бытьADODataSet1.Filter:= "name LIKE ""а%""";
ADODataSet1.Filtered:=true;
> FilterOption are not supported
> С чем это может быть связано?
с тем что не поддерживается... ясно же написано.
← →
Дева © (2005-11-19 18:38) [12]Virgo_Style
Спасибо, работает. Только возникла одна проблема
s:= Edit1.Text+" Like """+Edit2.Text+"""";
ADOQuery1.Filter:=s;
ADOQuery1.Filtered:=true;
Если в поле Edit2 ввести < А_БББ>
то будет искать А_БББ, а не АББББ, ААБББ, АВБББ и т. д. Почему?
← →
Virgo_Style © (2005-11-19 19:31) [13]Почему?
Похоже, у Like в Filter довольно своеобразная реализация... Работает только в виде <маска>% и <маска>_, причем количество символов никак не учитывает... Видимо, без переоткрытия запроса все же никак.
← →
sniknik © (2005-11-19 20:48) [14]> Видимо, без переоткрытия запроса все же никак.
есть еще событие OnFilterRecord...
← →
Virgo_Style © (2005-11-19 21:11) [15]sniknik © (19.11.05 20:48) [14]
Действительно... а если еще и MatchesMask использовать, то похоже, проблема решится буквально в одну строку...
← →
Дева © (2005-11-19 23:35) [16]Virgo_Style, не поняла, как использовать MatchesMask?
← →
Дева © (2005-11-20 02:13) [17]Как фильтровать отфтльтрованные уже данные?
Через ADOQuery1.Filter?
← →
Virgo_Style © (2005-11-20 08:58) [18]Дева © (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 подерживает *, ? и еще некоторые вещи, в справке написано.
← →
Virgo_Style © (2005-11-20 09:05) [19]Virgo_Style © (20.11.05 8:58) [18]
Ну вот, не поленился, проверил %-) Работает, только после изменения фильтра надо его применить (может быть, надо не так, лень искать - но работает):ADOQuery1.Filtred:=false;
ADOQuery1.Filtred:=true;
← →
Дева © (2005-11-20 13:42) [20]Возможно ли фильтровать отфтльтрованные уже данные?
Через ADOQuery1.Filter?
?????????????????????????????
← →
Virgo_Style © (2005-11-20 15:19) [21]Дева © (20.11.05 13:42) [20]
Что значит - уже отфильтрованные? Наложение фильтров? Есть такой keywordAND
.
← →
Дева © (2005-11-20 16:02) [22]Virgo_Style, keyword AND - что ты имешь ввиду?
Я использую метод ADOQuery1.Filter. После этого, если использовать еще раз, то фильтруются все записи из ADOQuery1. Можно ли фильтровать те записи, которые уже отфильтрованны? То есть сохранять прошлую фильтрацию?
← →
Virgo_Style © (2005-11-20 16:09) [23]Дева © (20.11.05 16:02) [22]
NewFilter - это условие, которое мы хотим наложить:
...NewFilter:="("+NewFilter+")";
with ADOQuery1 do
if Filter>"" then Filter:=Filter+" AND "+NewFilter else Filter:=NewFilter;
Страницы: 1 вся ветка
Текущий архив: 2005.12.04;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.064 c