在 Microsoft Access 数据表上自定义自动完成功能

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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 删除重复项。 希望这个简洁的答案就足够了吗?

【讨论】:

以上是关于在 Microsoft Access 数据表上自定义自动完成功能的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:在非对象上调用成员函数 fetchALL() - 在 Microsoft Access 数据库上使用 PDO

如何在 Microsoft Access 表单上计算年龄? [复制]

使用窗体上的按钮将值插入Microsoft Access数据库

Microsoft Access 备忘录数据类型到 MySQL 数据类型

Microsoft Access 2007 数据库相关

在 Mac 上从 Microsoft Access 文件导入数据