Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.08;
Скачать: CL | DM;

Вниз

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

 
VAleksey ©   (2002-06-14 09:47) [0]

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


 
Lord Warlock ©   (2002-06-14 09:55) [1]

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

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


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


> Lord Warlock © (14.06.02 09:55)

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


 
Lola ©   (2002-06-14 10:47) [3]

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


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

> 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 не работает, а то ...


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

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

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

естественно

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

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


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

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


 
VAleksey ©   (2002-06-14 12:36) [7]


> Val © (14.06.02 11:15)

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


 
roottim   (2002-06-14 14:28) [8]

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


 
vuk ©   (2002-06-14 15:19) [9]

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


 
Lord Warlock ©   (2002-06-14 15:26) [10]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.07.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
8-23678
ATLANTIDO
2002-03-01 19:07
2002.07.08
ИМПОРТ 3D-МОДЕЛЕЙ


1-23588
zam
2002-06-24 17:44
2002.07.08
Как изменить цвет или границу выделенного элемента в listview


3-23496
Dark Programmer
2002-06-17 04:29
2002.07.08
Чеза барада?


1-23668
cher_gvf
2002-06-26 13:12
2002.07.08
Как узнать код ошибки EInOutError ?


4-23837
Oxy2
2002-05-09 13:49
2002.07.08
Перенаправление ввода-вывода консоли