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

Access VBA Converting DateTime to Short Date in DCount

我正在使用 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

我的建议是使用

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

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

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

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

DateValue(Now) returns 与 Date() 相同的 Date/Time 值。因此,您可以 CurDate = Date 而不是 CurDate = DateValue(Now)。但是,我没有看到保存 CurDate 变量中的值有任何好处;需要的时候就用Date()

更令人担忧的是"Converting DateTime to Short Date in DCount"。这意味着数据库引擎必须从 tbl_Data 的每个候选行转换 tsUpdated 值以确定哪些行满足您的 WHERE 条款标准。这意味着引擎无法利用 tsUpdated 上的索引来快速识别候选行。所以不要那样做。

使用 tsUpdated 索引这样的方法会更快:

DCount("[EC#]", "tbl_Data", "[AssocID] = " & GetID & " AND [tsUpdated] >= Date AND [tsUpdated] < (Date + 1)")