在 MS Access 中,我可以在这样的查询中过滤日期:例如。
注册日期 > #31/12/2013#
这将使数据库仅显示 SignUpDate 为 2014 年或更新的记录
我将如何在德尔福中做到这一点?
dmGym.tblMembers.filter := 'SignUpDate > ''#31/12/2013#''' 似乎不起作用
请帮助它将不胜感激
你可以试试 :
dmGym.tblMembers.Filter:='SignUpDate > 31/12/2013';
dmGym.tblMembers.Filtered:=True;
这将使数据库仅显示 SignUpDate 为 2014 年或更新的记录。
祝你好运。
Delphi 将日期时间存储为实数。今天是 2016 年 6 月 5 日,DateTime 的整数部分是 42,526。日期零是 1900 年的开始。您需要生成一个名为 DateInt 的变量。
Var DateInt:整数 Date1:TDate;开始 DateInt := Trunc(Date1)
保存日期时,将 DateInt 保存在 BeforePost 事件处理程序中。这是一个额外的字段,但过滤现在很容易。例如,您的过滤器现在可以是
NewDateInt := Trunc(Date1); 过滤器 := 'NewDate = DateInt';
我认为你不需要#
s,试试
[...].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 函数#
会为您插入符号(并在对字符串字段执行类似操作时对其进行哈希处理(发现双关语) - 请参阅ADO 中的 # 符号定位(Delphi XE5) )。
但是在 TAdoTable 上设置一个简单的过滤器似乎绕过了 ADODB.GetFilterStr 并直接分配给它的记录集的 Filter 属性,所以我猜如果#
需要 s ,它们必须由 ADO/MDac 层插入。
试试 dmGym.tblMembers.filter := 'SignUpDate > #yyyy/mm/dd#' (2013/12/31)
- 归功于 kobik 的评论