1

在 MS Access 中,我可以在这样的查询中过滤日期:例如。

注册日期 > #31/12/2013#

这将使数据库仅显示 SignUpDate 为 2014 年或更新的记录

我将如何在德尔福中做到这一点?

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

请帮助它将不胜感激

4

4 回答 4

2

你可以试试 :

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

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

祝你好运。

于 2016-07-31T14:44:11.490 回答
0

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

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

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

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

于 2016-06-05T08:26:47.077 回答
0

我认为你不需要#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 层插入。

于 2015-09-26T15:22:36.270 回答
0

试试 dmGym.tblMembers.filter := 'SignUpDate > #yyyy/mm/dd#' (2013/12/31)

- 归功于 kobik 的评论

于 2016-07-31T16:03:42.160 回答