You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:03:21