如何将Delphi ADOTable过滤器应用于日期数据类型

时间:2015-09-26 14:40:25

标签: delphi ms-access filter tadotable

在MS Access中

我能够在查询中过滤日期,如下所示: 离。

SignUpDate>第31 /二千零十三分之十二#

这将使数据库仅显示SignUpDate在2014年或更新版本中的记录

我将如何在delphi中执行此操作?

dmGym.tblMembers.filter:='SignUpDate> ''#31/12/2013#'''似乎不起作用

请帮助它将不胜感激

4 个答案:

答案 0 :(得分:2)

您可以尝试:

dmGym.tblMembers.Filter:='SignUpDate > 31/12/2013';
dmGym.tblMembers.Filtered:=True;

这将使数据库仅显示SignUpDate在2014年或更新版本的记录。

祝你好运。

答案 1 :(得分:0)

我认为您不需要#,请尝试

[...].Filter := '12/31/2013';  // this is for Sql Server and tested 
  //  for UK locale, for Access you may need to swap the dd and mm, 
  //and maybe even the yyyy as suggested by @kobik in a comment.

如果在TAdoDataSet.Locate()中使用TDateTime字段,函数GetFilterStr将为您插入#符号(并在对字符串字段执行类似操作时对其进行哈希处理(发现双关语) - 见# signs in ADO locates (Delphi XE5))。

但是在TAdoTable上设置一个简单的过滤器似乎绕过ADODB.GetFilterStr并直接分配给它的记录集的Filter属性,所以我猜测是否需要# s ,它们必须由ADO / MDac层插入。

答案 2 :(得分:0)

Delphi将日期时间存储为实数。今天是2016年6月5日,DateTime的整数部分是42,526。日期零是1900年的开始。您需要生成一个名为DateInt的变量。

无功   DateInt:整数   Date1:​​TDate; 开始   DateInt:= Trunc(Date1)

保存日期时,将DateInt保存在BeforePost事件处理程序中。这是一个额外的字段,但过滤现在很容易。例如,您的过滤器现在可以

NewDateInt:= Trunc(Date1); 过滤:='NewDate = DateInt';

答案 3 :(得分:0)

尝试dmGym.tblMembers.filter:=' SignUpDate> #YYYY / MM / DD#' (2013年12月31日)

-credit to kobik的评论