2015-03-19 126 views
0

我有一个允许用户创建记录的数据库系统。在将记录发布到表格时,它捕获当前的日期和时间。按日期范围筛选数据库记录

我有一个允许用户过滤/搜索记录的表单。

允许过滤记录日期的最佳方法是什么?像StartDate EndDate一样?

以下是我在捕获记录的日期时间时执行的操作。

FieldByName('logged_dt')。AsDateTime:= now;

+0

您是否以文本形式在数据库中存储日期? – 2015-03-19 13:08:43

+0

我编辑了我的问题,我错了我在捕获日期/时间时的操作 – Sharpie 2015-03-19 13:21:42

+0

我已经回滚了您的编辑,因为您现在收到的错误消息是一个不同的问题。在收到答案后,你不能对改变它的全部含义的问题做出重大改变。如果您现在有新问题,请创建一个新问题并在此处询问。我回答了您在此处询问的问题,即如何按日期范围筛选记录。 – 2015-03-25 15:52:30

回答

2

这样做的典型方法是通过使用具有参数SQL和WHERE子句:

Query.SQL.Clear; 
Query.SQL.Add('SELECT ColumnA, ColumnB, DateCol'); 
Query.SQL.Add('FROM TableA'); 
Query.SQL.Add('WHERE DateCol >= :StartDate'); 
Query.SQL.Add('AND DateCol <= :EndDate'); 
Query.ParamByName('StartDate').AsDateTime := StartDateYouWant; 
Query.ParamByName('EndDate').AsDateTime := EndDateYouWant; 
Query.Open; 
if Query.IsEmpty then 
    ShowMessage('No records found in that range') 
else 
    // Do whatever with the rows found 

一个可选的语法是使用BETWEEN,这将在WHERE子句更改为

Query.SQL.Add('WHERE DateCol BETWEEN :StartDate AND :EndDate'); 

由于价值的时间部分以及使用>=(GTE)和(根据我自己的经验),我遇到了使用DATETIME列使用BETWEEN的问题(LTE)运营商更容易工作。您的里程可能会有所不同,因此您应该测试并决定哪种方法最适合您的特定DBMS和数据。