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

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

Теоретический вопрос про фильтры


VAleksey ©   (2002-06-14 09:47:00) 

Можно ли на отфильтрованную таблицу наложить еще один фильтр не снимая старый ?


Andy First   (2002-06-14 15:40:00) [1]

Можно в TQuery задать свойство Filter, а затем использовать SELECT. В итоге получится фильтр от выборки.


Lord Warlock   (2002-06-14 15:26:00) [2]

Я например делал динамическое формирование св-ва Filter в зависимости от выбранных чекбоксов в TCheckboxList, причем их кол-во было не постоянным. То же можно сделать и для OnFilterRecord


vuk   (2002-06-14 15:19:00) [3]

В BDE, помнится, фильтры были каскадные и могли накладываться друг на друга...


roottim   (2002-06-14 14:28:00) [4]

никак!
только select from select...


VAleksey   (2002-06-14 12:36:00) [5]


> Val © (14.06.02 11:15)

Щас только с футбола (- , но это лирика.
И да и нет.
1-й фильтр по одному условию, а 2-й по другому, а 3-й по третьему, а в одну процедуру их не запихаешь т.к. много проверок надо. Вот так вот.


Val   (2002-06-14 11:15:00) [6]

>VAleksey © (14.06.02 09:47)
странный несколько вопрос-от меня суть несколько ускользает, похоже - ведь наложение еще одного фильтра, без снимания старого - это динамическое добавление к существующему фильтру дополнительных условий, но в любом случае, это его переопределение?


AlexSV   (2002-06-14 10:54:00) [7]

Пардон, опечатался

procedure TRLightSeek.FormClose(Sender: TObject; var Action: TCloseAction);

естественно

procedure TFilterForm.FormClose(Sender: TObject; var Action: TCloseAction);

резал из разных юнитов.


AlexSV   (2002-06-14 10:51:00) [8]

> VAleksey ©

Можно.
Вот только реализация будет зависеть от конкретной задачи.

Решение в лоб:

type
TFilterForm = class(TForm)
...
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure OnNewFilterRecord(DataSet: TDataSet; var Accept: Boolean);
...
end;

var
OnOldOnFilterRecord : TFilterRecordEvent;

procedure TFilterForm.FormShow(Sender: TObject);
begin
//привязываем свой фильтр
OnOldOnFilterRecord := Query1.OnFilterRecord;
Query1.OnFilterRecord := OnNewFilterRecord;
end;

procedure TFilterForm.OnNewFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if Assigned(OnOldOnFilterRecord) then
OnOldOnFilterRecord(DataSet, Accept);
if Accept then begin
// Здесь фильтруешь что надо
end;
end;

procedure TRLightSeek.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// подчищаем после себя
Query1.OnFilterRecord := OnOldOnFilterRecord;
end;

При этом надо учесть, что в данный момент никто больше с твоим
Query не работает, а то ...


Lola   (2002-06-14 10:47:00) [9]

Пробовала - нельзя, даже если очень нужно. Ведь в св-во Filter переменную не запихнешь.


VAleksey   (2002-06-14 10:07:00) [10]


> Lord Warlock © (14.06.02 09:55)

ЭЭЭ дарагой -) не нада мне такие варианты предлагать ! -) Эт я и сам знаю. Чай не одну книгу прочитал.
Поясню. Вопрос практической значимости не имеет. Имеется в виду OnFilterRecord.
PS
Cкорее всего нельзя, но интересно... а вдруг ?


Lord Warlock   (2002-06-14 09:55:00) [11]

Естественно можно.

Например у тебя фильтр записан в событии OnFilterRecords,
в свойство Filter пишешь еще один и они работают вместе


Наверх

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