![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Теоретический вопрос про фильтры
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 пишешь еще один и они работают вместе