Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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]

Что значит - уже отфильтрованные? Наложение фильтров? Есть такой keyword AND.


 
Дева ©   (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
2-1132402072
Nikos
2005-11-19 15:07
2005.12.04
Установка иконки в exe файл


10-1108636552
Swimmer
2005-02-17 13:35
2005.12.04
Так стоит использовать CORBA


2-1132475688
Alex77777
2005-11-20 11:34
2005.12.04
"Зациклить" форму


5-1115307035
Mutex
2005-05-05 19:30
2005.12.04
Проблема с экспертом (IOTAFormEditor)


6-1124811090
ReFresh
2005-08-23 19:31
2005.12.04
TCP тунель.