MS Access 2016表单匹配姓名后显示全部对应ID问题求助
解决Access表单中重复姓名返回所有匹配ID的问题
你的代码当前只返回第一条匹配记录的SSID,核心原因是没有遍历整个查询结果集。要返回所有同名记录的ID,需要循环读取记录集里的每一条记录,把对应的SSID逐一追加到文本框中。
修改后的代码如下:
Private Sub Command79_Click() NameTxt.SetFocus NameTxt.Text = NameTxt.Text & vbNewLine & Entry.Value Dim rst As DAO.Recordset Dim strsql As String Dim ssidResult As String ' 构建查询语句,当前为包含匹配,若需精确匹配可改为FullName = '" & Entry.Value & "'" strsql = "SELECT ID, FullName, SSID FROM AllData WHERE FullName Like '*" & Entry.Value & "'" Set rst = CurrentDb.OpenRecordset(strsql) SSIDTxt.SetFocus If rst.EOF Then ssidResult = "Error: Name Doesn't Have a Match." Else ' 循环遍历所有匹配记录 Do While Not rst.EOF ssidResult = ssidResult & vbNewLine & rst.Fields("SSID") rst.MoveNext ' 移动到下一条记录 Loop ' 移除开头多余的换行符 ssidResult = Mid(ssidResult, Len(vbNewLine) + 1) End If SSIDTxt.Text = SSIDTxt.Text & vbNewLine & ssidResult rst.Close Set rst = Nothing Entry.SetFocus Entry.Value = "" End Sub
关键修改说明:
- 新增
ssidResult变量临时存储所有匹配的SSID,减少多次操作文本框的性能损耗 - 用
Do While Not rst.EOF循环遍历完整记录集,配合rst.MoveNext实现逐条读取 - 处理结果字符串开头的多余换行符,保证显示格式整洁
- 统一将所有结果追加到SSIDTxt文本框,避免分散操作
额外优化建议:
如果需要精确匹配姓名(而非包含输入内容),将SQL语句中的Like '*" & Entry.Value & "'"改为= '" & Entry.Value & "'"即可。为避免SQL注入风险,更规范的做法是使用参数查询:
strsql = "SELECT ID, FullName, SSID FROM AllData WHERE FullName Like '*' & ? & '*'" Set rst = CurrentDb.CreateQueryDef("", strsql).OpenRecordset(, , Entry.Value)
内容的提问来源于stack exchange,提问作者Nicholas Poplavskyy
相关产品推荐
相关产品推荐

