相同的 ApplyFilter 代码适用于报告加载但在按下表单按钮时失败

Identical ApplyFilter code works on report load but fails on form button press

我正在开发一种根据出生日期过滤查询数据的表单。应该很简单。起初我打算把它作为报告来做,但决定用表格会更好。在报告中,我的过滤器代码工作正常;它检查选择表单上未绑定框的值并相应地进行过滤。像这样:

Private Sub Report_Load()

Dim start_dob As String
Dim end_dob As String

If CurrentProject.AllForms("frm_Birth_range_selector").IsLoaded = True Then
    start_dob = Forms!frm_Birth_range_selector!txt_DOB_start
    end_dob = Forms!frm_Birth_range_selector!txt_DOB_end
    Me.FilterOn = True
    DoCmd.ApplyFilter , "DOB >= '" & start_dob & "' and DOB <= '" & end_dob & "'"
End If

End Sub

我试图在一个表单上做同样的事情,在表单上使用未绑定的框和一个按钮来应用过滤器。相同的查询。除了引用不同的框外,相同的代码。相同的框属性,我什至尝试从选择器表单中复制粘贴框以确保我没有遗漏任何内容。此代码 returns 一次 运行 次 3464 错误,Data type mismatch in criteria expression 错误:

Private Sub Command33_Click()

Dim start_dob As String
Dim end_dob As String

start_dob = Me.txt_DOB_start
end_dob = Me.txt_DOB_end
Me.FilterOn = True
DoCmd.ApplyFilter , "DOB >= '" & start_dob & "' and DOB <= '" & end_dob & "'"

End Sub

我尝试用 Forms!frm_birth_log! 替换 Me.。没有变化。

此错误可能与日期有关 - 如果日期 > 12,您的代码可能无法正常运行,因为日期应为美国格式。使用这样的东西:

Private Sub Command33_Click()
    Dim start_dob As Date
    Dim end_dob As Date

    If IsDate(Me.txt_DOB_start) And IsDate(Me.txt_DOB_end) Then
        start_dob = CDate(Me.txt_DOB_start)
        end_dob = CDate(Me.txt_DOB_end)
        Me.Filter = "DOB >= #" & Format(start_dob, "mm\/dd\/yyyy") & "# and DOB <= #" & Format(end_dob, "mm\/dd\/yyyy") & "#"
        Me.FilterOn = True
    Else
        MsgBox "Invalid date"
    End If
End Sub

而且我建议始终在每个模块中使用 Option Explicit 指令。使用此指令编译器会给您一个错误,因为您声明了 send_dob 并使用了 end_dob。此类错误有时会导致不可预测的结果并且难以发现。