2015-09-26 106 views
1

MS Access中我可以在如下查詢中過濾日期: 前。如何將一個Delphi ADOTable過濾器應用於日期數據類型

SignUpDate>第31/12/2013年#

這將使數據庫只顯示記錄,其中SignUpDate是在2014年或更新

我怎麼會做這樣的德爾福?

dmGym.tblMembers.filter:= 'SignUpDate>'第31/12/2013年#' '' 似乎並沒有工作

請幫助它西港島線是極大的讚賞

+1

嘗試'dmGym.tblMembers.filter: ='SignUpDate>#yyyy/mm/dd#''('2013/12/31') – kobik

+0

謝謝! – RaymondSWalters

回答

0

嘗試dmGym.tblMembers.filter:= 'SignUpDate>#YYYY/MM/DD#'(2013年12月31日)

-credit到kobik的評論

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插頭的#跡象,你(並使得它的哈希(當場功能雙關語)時,爲字符串字段做類似 - 見# signs in ADO locates (Delphi XE5))。

但是在TAdoTable上設置一個簡單的過濾器似乎繞過了ADODB.GetFilterStr並直接賦值給它的記錄集的Filter屬性,所以我猜測如果需要# s,它們必須由ADO插入/ MDac層。

+0

謝謝,但科比克已經回答了我的問題,他的方式工作 – RaymondSWalters

+0

沒有probs - 我輸入它,我想我不妨將它發佈,尤其是它超出了你的具體q。我已經編輯它來承認@ kobik的建議。 – MartynA

0

Delphi將日期時間存儲爲實數。今天是2016年6月5日,DateTime的整數部分是42,526。日期零是1900年的開始。您需要生成一個名爲DateInt的變量。

Var DateInt:整數 Date1:​​TDate; 開始 DateInt:= Trunc(Date1)

當您保存日期時,將DateInt保存在BeforePost事件處理程序中。這是一個額外的領域,但過濾現在很容易。例如,您的過濾器現在可以是

NewDateInt:= Trunc(Date1); Filter:='NewDate = DateInt';

2

你可以試試:

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

這將使數據庫只顯示記錄,其中SignUpDate是在2014年或更高版本。

祝你好運。

相關問題