我正在处理一个根据出生日期筛选查询数据的表单。应该很简单。起初我打算将其作为报告,但决定表格会更好。在报告中,我的过滤器代码工作正常;它会检查选择表单上未绑定框的值并相应地进行过滤。像这样:
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
我尝试在表单上执行相同的操作,使用未绑定的框本身和一个按钮来应用过滤器。相同的查询。相同的代码,但引用不同的框。相同的盒子属性,我甚至尝试从选择器表单复制粘贴框,以确保我没有错过任何东西。此代码返回运行时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
我尝试用Me.
替换Forms!frm_birth_log!
。没有变化。
答案 0 :(得分:1)
此错误可能与日期有关 - 如果日期为&gt; 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
。这种错误有时会导致不可预测的结果,很难找到。