相同的 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
。此类错误有时会导致不可预测的结果并且难以发现。
我正在开发一种根据出生日期过滤查询数据的表单。应该很简单。起初我打算把它作为报告来做,但决定用表格会更好。在报告中,我的过滤器代码工作正常;它检查选择表单上未绑定框的值并相应地进行过滤。像这样:
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
。此类错误有时会导致不可预测的结果并且难以发现。