2015-03-19 128 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和數據。