Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

О фильтре


Страницы:   1 2

Дева ©   (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]

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


Дева   (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 <шаблон>.
Как задается шаблон, я, честно говоря, не помню, это должно быть в справке к базе.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо