2012-01-25 58 views
0

我有一個ADODB 2.x記錄集,並試圖將過濾器應用於記錄集中的DateTime列/字段。如何正確設置DateTime值的ADODB.Recordset.Filter屬性?

我不知道如何在Windows中配置其國際日期格式設置。從大量的谷歌搜索中,我不完全確定Windows日期格式設置是否確定了Filter屬性所需的日期格式,或者是否始終以美國日期格式預期。 (當然,MS文檔是沒有注意到這一點。)

那麼,如何正確地一個寫這行代碼,所以我不擔心用戶在Windows中配置什麼日期格式:

rs.Filter = "StartDateTime >= " & dteStartDate 

...其中dteStartDate包含Date和Time組件。

回答

0

過濾器的格式需要與記錄集中的值格式相同。我剛剛遇到了來自MS SQL服務器的記錄集的相同問題。該記錄集包含YYYY-MM-DD格式的日期。

這種失敗:

CalendarRS.filter = "DateField = #" & datevalue(DisplayDate) & "#" 

即使日期匹配,沒有記錄是在過濾記錄。勾選後,存儲在CalendarRS.filter值是「的DateField =#08中/二千○十四分之二十九#」請注意,這包括正斜槓和順序是不同的(MM/DD/YYYY)

這成功:

CalendarRS.filter = "DateField = #" & year(datevalue(DisplayDate)) & "-" & right("00" & month(datevalue(DisplayDate)),2) & "-" & right("00" & day(datevalue(DisplayDate)),2) & "#" 

選中時,CalendarRS.filter中存儲的值爲「DateField =#2014-08-2014#」。這會返回正確的過濾記錄集。

對於一個完整的日期和時間,你需要做同樣的事情,並添加小時,分鐘,秒。

CalendarRS.filter = "DateField = #" & year(datevalue(DisplayDate)) & "-" & right("00" & month(datevalue(DisplayDate)),2) & "-" & right("00" & day(datevalue(DisplayDate)),2) & " " & Right("00" & Hour(datevalue(DisplayDate)),2) & ":" & Right("00" & Minute(datevalue(DisplayDate)),2) & ":" & Right("00" & Second(datevalue(DisplayDate)),2) & "#"