我能够在查询中过滤日期,如下所示: 离。
SignUpDate>第31 /二千零十三分之十二#
这将使数据库仅显示SignUpDate在2014年或更新版本中的记录
我将如何在delphi中执行此操作?
dmGym.tblMembers.filter:='SignUpDate> ''#31/12/2013#'''似乎不起作用
请帮助它将不胜感激
答案 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的评论