MS Access VBA SQL SELECT * INTO tempTbl WHERE Stuff="" AND OtherStuff BETWEEN Date Range

MS Access VBA SQL SELECT * INTO tempTbl WHERE Stuff="" AND OtherStuff BETWEEN Date Range

我有一个表单,其中包含一个文本框、两个组合框(下拉列表)和两个带有 mm/dd/yyyy 99/99/0000;0;_

输入掩码的文本框

我正在尝试将所有这些字段用作子表单的过滤器。 我将控件设置为在更新后触发,运行 一个 sub 为临时 Table 构建 SELECT * INTO sql 字符串,然后 sourceobject'ed 回到subform.

在我拥有的每个控件的代码中,我有代码为最终 sql 构建 Where 语句的片段。片段根据需要增长,标记为 "Filter"

其他一些未完成的代码....

If Not IsNull(txtDateFrom) Then
If i > 1 Then Filter = Filter & " AND " & "([Date_LastSaved] >= " & Me.txtDateFrom & ")" & " And " & "([Date_LastSaved] <= " & Me.txtDateTo & ")"
End If


Dim sql As String
sql = "SELECT * INTO tmpTable FROM tblReview"
If Not IsNull(Filter) Then
    sql = sql & " WHERE " & Filter
End If

我的问题是我正在测试这种特定情况,其中会出现 Filter = Filter & " AND " & "DATE_STUFF"

最后的 sql 看起来像...

SELECT * INTO tmpTable FROM tblReview WHERE ReviewStatus = 'Quoted' AND ([Date_LastSaved] >= 09/12/2018) And ([Date_LastSaved] <= 10/16/2018)

测试数据应该会有一些结果。然而,tmpTable 是空的。

只有在我应用日期范围条件时才会发生这种情况。

我试过 BETWEEN 但无法确定语法。

非常感谢任何见解,谢谢!

更新: 答案:

If i > 1 Then Filter = Filter & " AND " & "([Date_LastSaved] >= #" & Me.txtDateFrom & "#)" & " And " & "([Date_LastSaved] <= #" & Me.txtDateTo & "#)"

如果您想使用日期,则必须将它们加引号。如果你只说 10/16/2018 那么你将整数 10 除以 16 除以 2018,这将产生整数零。然后它将日期转换为整数以进行比较,这将产生更大的数字,因此您没有行。

任何日期测试都应始终使用日期类型而不是字符串来完成。我认为在 msaccess 中你可以用 # 包围它,但不确定。只是研究这个。