【问题标题】:Customize auto-complete functionality on Microsoft Access datasheet在 Microsoft Access 数据表上自定义自动完成功能
【发布时间】:2017-06-22 20:24:24
【问题描述】:

我有一个绑定到用户记录的主表单,还有一个绑定到用户“拥有”的多个客户端对象的子表单。所以,用户和客户之间是一对多的关系。

由于子表单存在,用户可以在客户端子表单中添加、删除和编辑条目。当用户向子表单数据表中添加条目时,有一个自动完成功能会在用户键入与客户端数据库中的任何名称匹配的客户端名称的一部分时启动,从而为用户节省一些击键并确保用户输入与客户端数据库中的名称完全匹配的名称。

客户表需要注意的一点是,除了每个客户都有一个唯一的数字 ID 之外,每个客户还有一个完整的公司名称(Test Agency, Inc.)、一个俗名(Test Agency)和一个缩写名称(TA)。

我正在尝试编辑子表单,以便自动完成功能与上面列出的三个字段(全名、俗名和缩写名)中的任何一个匹配。目前,自动完成功能仅适用于全名,因为这是链接到子表单的字段。我希望用户能够输入字符串的一部分,子表单尝试将其与三个字段(全名、俗名、缩写名)中的任何一个匹配,并返回一个潜在匹配列表到任何一个三个领域。当用户为他们尝试搜索的客户选择正确的潜在匹配项时,然后将完整的公司名称输入到数据表中。基本上,这些附加字段只是让用户更容易找到他们正在寻找的客户端(想象一下输入 AMD 而不是 Advanced Micro Devices, Inc.)

我的第一个问题——这可能与一个简单的数据表有关吗?我已经研究过使用查找字段和多值查找字段,但我不确定这是正确的方法。或者我是否需要自己构建一个自定义控件,在多个字段上进行匹配?

【问题讨论】:

    标签: ms-access autocomplete ms-access-2016 datasheet


    【解决方案1】:

    这样查询

    SELECT *
    FROM Company
    WHERE fullName LIKE '*' & pCompany & '*'
        OR Colloquial LIKE '*' & pCompany & '*'
        OR Abbr LIKE '*' & pCompany & '*'
    

    在我的表单上我这样做了

    Private Sub cboCompany_KeyUp(KeyCode As Integer, Shift As Integer)
        ClearCombo cboCompany
    
        Dim sql As String
    
        Dim rs As DAO.Recordset
        Dim companySearch As DAO.QueryDef
        Set companySearch = CurrentDb.QueryDefs("CompanySearch")
        companySearch.Parameters("pCompany") = cboCompany.Text
    
        Set rs = companySearch.OpenRecordset
    
        Do While Not rs.EOF
            cboCompany.AddItem rs("ID") & ";" & rs("FullName") & ";" & rs("Colloquial") & ";" & rs("Abbr")
            rs.MoveNext
        Loop
    End Sub
    
    Private Sub ClearCombo(cbo)
        For i = cbo.ListCount - 1 To 0 Step -1
                cbo.RemoveItem i
        Next i
    End Sub
    

    它根本不是超级快,但它确实有效。我认为让它更快的不是提示 KeyUp 事件,而是在用户开始在该字段中输入时使用计时器。然后在他们停止输入或焦点离开组合框时关闭计时器。

    【讨论】:

      【解决方案2】:

      因此,您已经能够使用部分字符串进行搜索 - 可能是通过具有类似条件的查询。 下一步非常简单。搜索每个字段,通过 UNION 组合它们,并通过 SELECT DISTINCT 删除重复项。 希望这个简洁的答案就足够了吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-24
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多