Я думаю, это может зависеть от формата короткого времени, но это работает для меня, используя TADODataSet.
ADODataSet1.Filter := 'TimeField = 11:00:00';
ADODataSet1.Filtered := True;
Более полное решение - вместо этого использовать событие OnFilterRecord.
procedure TForm4.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if DataSet.FieldByName('TimeField').AsDateTime = FilterValue then
Accept := True
else
Accept := False
end;
Если вам нужен интервал, он будет выглядеть следующим образом.
ADODataSet1.Filter := 'TimeField >= 10:00:00 and TimeField < 11:00:00';
ADODataSet1.Filtered := True;
OnFilterRecord
procedure TForm4.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if (DataSet.FieldByName('DateField').AsDateTime >= FromTime) and
(DataSet.FieldByName('DateField').AsDateTime < ToTime) then
Accept := True
else
Accept := False
end;
Если вы используете нотацию AMPM, вам нужно заключить время в '
ADODataSet1.Filter := 'TimeField >= ''10:00 AM'' and TimeField < ''11:00 AM''';
ADODataSet1.Filtered := True;
Но я бы действительно рекомендовал вместо этого OnFilterRecord, чтобы вам не приходилось беспокоиться оформаты времени.