Скажу как художник художнику (в смысле чайник-чайнику).
Мне много раз помогали на этом форуме, поэтому может кому пригодиться:
Две недели искал на форумах (может плохо, может не там, но не нашел), 2 недели экспериментировал. Я чайник и на большее не претендую, но может какому то ещё любителю пригодиться, чтоб сберечь время.
Мне нужен был фильтр именно по событию OnFilterRecord, через выбор RadioGroup и по двум логическим полям (показывать/не показывать).
Дано:Компоненты ADOConnection1 иADOQuery1 лежат в DataModule1.
RadioGroup1(3 радиокнопки), DataSource1 и DBGrid1 на Form1.
В таблице два взаимоисключающие логических поля (Rate1 и Rate2 типа Boolean).
Надо при нажатии радиокнопки1 показать все отмеченые записи Rate1, по радиокнопе2 - отмеченные Rate2, по радиокнопке3 показать отмеченные Rate1 и Rate2.
Клик RadioGroup1 на Form1
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
DataModule1.ADOQuery1.Filtered:=False;
DataModule1.ADOQuery1.Filtered:=True;
end;
В DataModule1.ADOQuery1 в обработчике события OnFilterRecord:
procedure TDataModule1.ADOQuery1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
case Form1.RadioGroup1.ItemIndex of
0: Accept:= DataSet['Rate1'] = true;
1: Accept:= DataSet['Rate2'] = true;
End;
end;
Наверняка специалисты раскритикуют, но у меня работает, меня устраивает, и запоминается легко.