访问VBA在DCount中将DateTime转换为短日期

时间:2015-03-05 18:33:08

标签: vba datetime ms-access access-vba

我正在使用Access 2007。

我需要将完整日期和时间字段的值转换为日期部分,以便我可以看到它是否与今天日期的dcount相匹配。我已经尝试过DateValue(),Int()等等,我认为我做得对(有可能我没有)。它似乎不起作用。

这是我的代码没有我尝试过的任何事情,以免混淆。您可以在此处看到[tsUpdated]值和CurDate值不匹配,因为[tsUpdated]是完整日期,CurDate只是日期。如何将[tsUpdated]格式化为DCount中的日期...并使其有效?

GetID = Forms!frm_MainMenu!AssocIDBox
CurRecord = Forms!frm_EC_All![L#].Value
CurDate = DateValue(Now)
'
Dim tCompleted As String: tComp = DCount("[EC#]", "tbl_Data", "[AssocID] = " & GetID & " AND [tsUpdated] = " & CurDate)
'
MsgBox "You completed " & tComp & " today.", vbOKOnly, "Summary"
'
End Sub

2 个答案:

答案 0 :(得分:3)

DateValue(Now)返回与Date()相同的日期/时间值。因此,您可以CurDate = DateValue(Now)代替CurDate = Date而不是Date()。但是,我认为保存 CurDate 变量中的值没有任何好处;只需在需要时使用WHERE

更值得关注的是“将日期时间转换为DCount中的短日期”。这意味着db引擎必须从 tbl_Data 的每个候选行转换 tsUpdated 值,以确定哪些行满足您的DCount("[EC#]", "tbl_Data", "[AssocID] = " & GetID & " AND [tsUpdated] >= Date AND [tsUpdated] < (Date + 1)") 子句条件。这意味着引擎无法利用 tsUpdated 上的索引来快速识别候选行。所以不要这样做。

tsUpdated 索引时,这样的方法会更快:

{{1}}

答案 1 :(得分:0)

我的建议是使用

Format([tsUpdated],"mm/dd/yyyy")

并创建一个将tsUpdated转换为ShortDate的查询。 例如:

 SELECT 
    [Field1], 
    [Field2],
    Format([tsUpdated],"mm/dd/yyyy") AS tsUpdated_S
 FROM
    tbl_Data

保存并调整您的DCount以使用此查询而不是表格。