Цитата:
Сообщение от spawn-1212
А можешь по подробней объяснить, лучше на примере или в моём исходнике как его применить?
|
Если бы компонент TDbf поддерживал свойство Filter и значение NULL в полях типа Дата/Время, то можно было бы сделать так:
Код:
procedure TForm1.ButtonClick(Sender: TObject);
begin
FDBF.Filtered := False;
FDBF.Filter := 'R069 IS NULL';
FDBF.Filtered := True;
end;
Но так как это свойство TDbf не поддерживает, то приходится использовать событие OnFilterRecord:
Код:
procedure TForm1.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := not DataSet.Filtered or DataSet.FieldByName('R069').IsNull;
end;
Но это работать не будет, потому что TDbf не поддерживает значение NULL в полях типа Дата/Время, а вместо этого отображает их как '01.01.1900'.
Поэтому чтобы отобрать только те записи которые имеют "пустое" значение в поле 'R069' делаем так:
Код:
procedure TForm1.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := not DataSet.Filtered or (DataSet.FieldByName('R069').AsDateTime = EncodeDate(1900, 1, 1));
end;
Где вместо "EncodeDate(..." можно просто подставить константу 2.