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 中你可以用 # 包围它,但不确定。只是研究这个。
我有一个表单,其中包含一个文本框、两个组合框(下拉列表)和两个带有 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 中你可以用 # 包围它,但不确定。只是研究这个。