使用两个未绑定的文本框按日期范围过滤表单记录

Posted

技术标签:

【中文标题】使用两个未绑定的文本框按日期范围过滤表单记录【英文标题】:Filter form records by date range using two unbound text boxes 【发布时间】:2021-07-19 06:24:39 【问题描述】:

下午好。 我有一个连续的表单,我想允许用户通过使用表单标题中的未绑定框进行过滤。请参阅下面的表格截图: Form Design View

我可以毫无问题地过滤错误类型(未绑定:cboErrorType)和责任(未绑定:cboResponsibility),但我无法使日期范围正常工作(正在返回所选日期范围之外的记录)。请看截图:

Form - filtered

请看我下面的代码:

Private Sub cmdFilter_Click()
Dim strWhere As String
Dim lngLen As Long
Const conJetDate = "\#dd\/mm\/yyyy\#"


If Not IsNull(Me.cboErrorType) Then
    strWhere = strWhere & "([ErrorType] = """ & Me.cboErrorType & """) AND "
End If

If Not IsNull(Me.cboResponsibility) Then
    strWhere = strWhere & "([Decision] = """ & Me.cboResponsibility & """) AND "
End If

If Not IsNull(Me.txtStartDate) Then
    strWhere = strWhere & "([Date of Error] >= " & Format(Me.txtStartDate, conJetDate) & ") AND "
End If

If Not IsNull(Me.txtEndDate) Then
    strWhere = strWhere & "([Date of Error] < " & Format(Me.txtEndDate + 1, conJetDate) & ") AND "
End If

lngLen = Len(strWhere) - 5
If lngLen <= 0 Then
    MsgBox "No criteria", vbInformation, "Nothing to do."
Else
    strWhere = Left$(strWhere, lngLen)
    'Debug.Print strWhere
    
    Me.Filter = strWhere
    Me.FilterOn = True
End If
End Sub

我正在使用以下代码删除过滤器:

Private Sub cmdResetFilter_Click()
Dim ctl As Control
For Each ctl In Me.Section(acHeader).Controls
    Select Case ctl.ControlType
    Case acTextBox, acComboBox
        ctl.value = Null
    End Select
Next
Me.FilterOn = False

End Sub

请问有人可以提出解决方案吗? 如果需要进一步的信息,请告诉我,我将尽义务。

非常感谢。

【问题讨论】:

【参考方案1】:

日期格式必须是“反向”美国格式 (mm/dd/yyyy) 或 ISO 格式(也适用于 ADO)。所以试试:

Const conJetDate = "\#yyyy\/mm\/dd\#"

【讨论】:

谢谢 Gustav,它现在正在工作。非常感谢。

以上是关于使用两个未绑定的文本框按日期范围过滤表单记录的主要内容,如果未能解决你的问题,请参考以下文章

用于过滤子表单数据表的未绑定文本框

根据同一文本框中的 2 个值过滤表单

未绑定表单/文本框的审计跟踪

绑定文本框时,AngularJs范围未定义

在子报表的子窗体中引用未绑定的文本框

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串