delphi - 如何在 Delphi 中根据 TDateTime 字段过滤数据集

标签 delphi datetime filter

我有一个数据集,需要按时间过滤。例如我想要 TDateTime 字段中包含的时间在上午 6:00 到下午 6:00 之间的记录。

我的数据集包含一个名为 time_of_day、类型为 TDateTime 的字段。分配给该字段的值是时间,没有日期。

我尝试使用时间的字符串表示形式 ( time_of_day >= '6:00 AM' and time_of_day <= '6:00 PM' ) 和浮点表示形式 ( time_of_day >= 0.25 and time_of_day < 0.75 ) 创建过滤器字符串,但都不起作用。

我需要知道如何构造过滤字符串以分配给 TDataSet.Filter 属性。

最佳答案

我认为这可能取决于短时间格式,但这对我使用 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;

过滤记录

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,这样您就不必担心时间格式。

关于delphi - 如何在 Delphi 中根据 TDateTime 字段过滤数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171699/

相关文章:

Delphi 声明项目中的单元 (DPR) 整个解决方案可见

ios - Delphi-XE4 iOS 上传新版本不知何故被忽略

java - 在Java中查看当前时间是否在当天的特定时间范围内

c++ - 如何删除 "Ctrl + Backspace"特殊字符?

filter - 如何处理不匹配的 Logstash grok 过滤器

delphi - 在我的特定类中实现Clone()的最佳方法

flash - TEmbeddedWB/Webbrowser 设置本地区域安全性以接受加载本地 SWF 文件不起作用,但在 'real' 浏览器中可以工作

mysql - 涉及日期时间的 CakePHP 查询

C# 在数千行上执行转换时区。随机得到 "The supplied DateTime represents an invalid time."

javascript - 使用 URL 过滤 JQuery 列表