Тема: dbf в delphi
Показать сообщение отдельно
  #64  
Старый 07.12.2012, 14:34
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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.
Ответить с цитированием