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

Ms access 在Microsoft Access数据表上自定义自动完成功能,ms-access,autocomplete,ms-access-2016,datasheet,Ms Access,Autocomplete,Ms Access 2016,Datasheet,我有一个绑定到用户记录的主窗体,一个子窗体绑定到用户“拥有”的多个客户端对象。因此,用户和客户端之间存在一对多关系 由于子窗体存在,用户可以在“客户端”子窗体中添加、删除和编辑条目。当用户向子表单数据表中添加条目时,会有一个自动完成功能,该功能会在客户端名称中与客户端数据库中的任何名称相匹配的用户类型部分启动,从而节省用户的几次击键,并确保用户输入的名称与客户端数据库中的名称完全匹配 客户表中需要注意的一点是,除了每个客户都有一个唯一的数字ID外,每个客户都有一个完整的公司名称(Test Age

我有一个绑定到用户记录的主窗体,一个子窗体绑定到用户“拥有”的多个客户端对象。因此,用户和客户端之间存在一对多关系

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

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

我正在尝试编辑子表单,以便自动完成功能与上面列出的三个字段(全名、俗名和缩写名)中的任何一个匹配。现在,autocomplete只对全名有效,因为全名是链接到子表单的字段。我希望用户能够键入字符串的一部分,子窗体尝试将其与三个字段(全名、俗名、缩写名)中的任何一个字段匹配,并返回三个字段中可能匹配的列表。当用户为他们试图搜索的客户选择正确的潜在匹配时,数据表中将输入完整的公司名称。基本上,这些额外的字段只会让用户更容易找到他们正在寻找的客户机(想象一下用AMD而不是Advanced Micro Devices,Inc.输入。)


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

因此,您已经能够使用部分字符串进行搜索-可能是通过具有类似条件的查询。 下一步很容易。搜索每个字段,通过并集将它们合并,并通过“选择不同项”删除重复项。
希望这个简洁的答案就足够了?

这样您就可以使用部分字符串进行搜索了-可能是通过使用类似条件的查询。 下一步很容易。搜索每个字段,通过并集将它们合并,并通过“选择不同项”删除重复项。 希望这个简洁的答案足够了?

提出了这样一个问题

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事件,而是在用户开始在该字段中键入时打开计时器。然后在他们停止键入或焦点离开组合框时关闭计时器

提出了这样一个问题

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事件,而是在用户开始在该字段中键入时打开计时器。然后在他们停止键入或焦点离开组合框时关闭计时器