它是一个访问错误吗?我的 txtBox 表单过滤问题在拆分数据库中输入值

Posted

技术标签:

【中文标题】它是一个访问错误吗?我的 txtBox 表单过滤问题在拆分数据库中输入值【英文标题】:Is it an access Bug? my problem with form filtering by txtBox entered value in a split DB 【发布时间】:2018-12-30 11:27:54 【问题描述】:

我有一个 Access 2016 DB 64 位包含相关表和一个搜索拆分表单,该表单具有一个 txtBox,它根据输入的值过滤记录。 几个月和数千条记录,每件事都很好。 当我想通过重写另一个类似的数据库但使用 32bts Access 2016 并将它从一开始就拆分为表后端和前端来使其更专业地部署到其他用户时,搜索表单没有显示任何在更新后事件中触发搜索参数时记录!

搜索表单链接到一个查询,我将其更改为新的,还尝试将表单直接链接到仅一个表进行测试也不正确,显示零结果。 删除过滤器后,所有记录都会再次显示。

当我直接从表单属性更改过滤器时,它也无法进行字符串搜索,但是当在表单控件中搜索主键时,它工作得很好。 (搜索字符串显示没有结果,搜索数字(前 ID 值,显示正确的结果)。 并且非常奇怪,当我构建另一个新数据库(相同访问应用程序)只是为了测试正在发生的事情时,使用表单并加入拆分后端表和表单中的文本框以输入关键字以显示所有相关记录那个拆分形式,它对字符串和数字都有效吗?

Private Sub txtSearch_AfterUpdate()

Dim strFilter As String

    On Error Resume Next

    If Me.txtSearch.Text <> "" Then

        strFilter = "[Complaints] Like '*" & Me.txtSearch.Text & "*'"
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    With Me.txtSearch
        .SetFocus
        .SelStart = Len(Me.txtSearch.Text)
    End With

End Sub

当将一个字符串放入txtsearch框时,代码必须在[Complaints]中搜索任何与之相似的字符串,并显示包含它的记录。

它适用于旧的 DB 64 位未拆分,但它不适用于新的 DB 32 位拆分到后端和前端。

【问题讨论】:

【参考方案1】:

小心使用.Text,因为它要求控件具有焦点。所以试试:

Private Sub txtSearch_AfterUpdate()

    Dim strFilter As String

    ' On Error Resume Next       ' Don't use while debugging.

    If Nz(Me!txtSearch.Value) <> "" Then
        strFilter = "[Complaints] Like '*" & Me!txtSearch.Value & "*'"
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    With Me!txtSearch
        .SetFocus
        .SelStart = Len(.Value)
    End With

End Sub

【讨论】:

亲爱的 Gustav,我尝试了你的建议,改为 .value 而不是 .text,但仍然无法正常工作。 如果它与当前数据库以外的新数据库一起工作,那么会发生其他事情,我们看不到。

以上是关于它是一个访问错误吗?我的 txtBox 表单过滤问题在拆分数据库中输入值的主要内容,如果未能解决你的问题,请参考以下文章

访问子表单选择取决于组合框

访问表单 - 查询表达式中的语法错误(缺少运算符)

更改表单过滤器时访问崩溃

MS 访问错误。 3464,过滤器类型不匹配,如何正确设置过滤器?

AngularJs Filter:生成notArray错误

为啥是#Name?访问表单上的时间控制有错误吗?