在 Microsoft Access 数据表上自定义自动完成功能
Customize auto-complete functionality on Microsoft Access datasheet
我有一个主窗体绑定到用户记录,子窗体绑定到用户的多个客户端对象"owns."因此,用户和客户端之间存在一对多关系。
由于子表单存在,用户可以在客户子表单中添加、删除和编辑条目。当用户向子表单数据表中添加一个条目时,有一个自动完成功能可以在用户键入与客户端数据库中的任何名称匹配的客户端名称部分时启动,从而为用户节省几次击键并确保用户输入名称与客户端数据库中的名称完全匹配。
关于客户 table 需要注意的一件事是,除了每个客户都有一个唯一的数字 ID 外,每个客户都有一个完整的公司名称 (Test Agency, Inc.)、一个俗称 (Test机构)和缩写名称 (TA)。
我正在尝试编辑子表单,以便自动完成功能与上面列出的三个字段(全名、俗称和缩写名)中的任何一个相匹配。现在,自动完成仅适用于全名,因为这是链接到子表单的字段。我希望用户能够输入字符串的一部分,子表单尝试将其与三个字段(全名、口语名称、缩写名称)和 return 列表中的任何一个匹配匹配三个字段中的任何一个。当用户为他们试图搜索的客户选择正确的潜在匹配时,然后完整的公司名称将被输入到数据表中。基本上,这些额外的字段只是让用户更容易找到他们正在寻找的客户(想象一下输入 AMD 而不是 Advanced Micro Devices, Inc.)
我的第一个问题——这可以用一个简单的数据表来完成吗?我研究过使用查找字段和多值查找字段,但我不确定这是正确的方法。或者我是否需要自己构建一个自定义控件来对多个字段进行匹配?
因此您已经能够使用部分字符串进行搜索 - 可能是通过具有类似条件的查询。
下一步很容易。搜索每个字段,通过 UNION 组合它们,并通过 SELECT DISTINCT 删除重复项。
希望这个简洁的答案就足够了吗?
进行了这样的查询
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 事件,而是一旦用户开始在该字段中输入时就触发计时器。然后在他们停止打字或焦点离开组合框时关闭计时器。
我有一个主窗体绑定到用户记录,子窗体绑定到用户的多个客户端对象"owns."因此,用户和客户端之间存在一对多关系。
由于子表单存在,用户可以在客户子表单中添加、删除和编辑条目。当用户向子表单数据表中添加一个条目时,有一个自动完成功能可以在用户键入与客户端数据库中的任何名称匹配的客户端名称部分时启动,从而为用户节省几次击键并确保用户输入名称与客户端数据库中的名称完全匹配。
关于客户 table 需要注意的一件事是,除了每个客户都有一个唯一的数字 ID 外,每个客户都有一个完整的公司名称 (Test Agency, Inc.)、一个俗称 (Test机构)和缩写名称 (TA)。
我正在尝试编辑子表单,以便自动完成功能与上面列出的三个字段(全名、俗称和缩写名)中的任何一个相匹配。现在,自动完成仅适用于全名,因为这是链接到子表单的字段。我希望用户能够输入字符串的一部分,子表单尝试将其与三个字段(全名、口语名称、缩写名称)和 return 列表中的任何一个匹配匹配三个字段中的任何一个。当用户为他们试图搜索的客户选择正确的潜在匹配时,然后完整的公司名称将被输入到数据表中。基本上,这些额外的字段只是让用户更容易找到他们正在寻找的客户(想象一下输入 AMD 而不是 Advanced Micro Devices, Inc.)
我的第一个问题——这可以用一个简单的数据表来完成吗?我研究过使用查找字段和多值查找字段,但我不确定这是正确的方法。或者我是否需要自己构建一个自定义控件来对多个字段进行匹配?
因此您已经能够使用部分字符串进行搜索 - 可能是通过具有类似条件的查询。 下一步很容易。搜索每个字段,通过 UNION 组合它们,并通过 SELECT DISTINCT 删除重复项。 希望这个简洁的答案就足够了吗?
进行了这样的查询
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 事件,而是一旦用户开始在该字段中输入时就触发计时器。然后在他们停止打字或焦点离开组合框时关闭计时器。