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

MS Access VBA SQL语句无返回记录问题排查求助

问题原因及解决建议
  • SQL语句拼接的引号错误
    你当前的SQL拼接代码里,变量PrtNbrGt的包裹方式完全错误,导致生成的SQL格式无效,根本匹配不到目标记录。
    原错误代码:

    strSQL = "SELECT tbl_BOM_Requirments.RequiredMaterialPrtNum" & vbCrLf & _
    "FROM tbl_BOM_Requirments" & vbCrLf & _
    "WHERE (tbl_BOM_Requirments.PrtNmber_LinkField) = "" & PrtNbrGt"""
    

    这段代码生成的SQL要么会把PrtNbrGt当成字符串字面量,要么会产生多余的引号,完全不符合查询生成器里的正确格式。

    改成以下两种正确写法之一即可:
    方法1(用单引号包裹字符串值):

    strSQL = "SELECT tbl_BOM_Requirments.RequiredMaterialPrtNum" & vbCrLf & _
    "FROM tbl_BOM_Requirments" & vbCrLf & _
    "WHERE tbl_BOM_Requirments.PrtNmber_LinkField = '" & PrtNbrGt & "'"
    

    方法2(用双引号转义,Access兼容写法):

    strSQL = "SELECT tbl_BOM_Requirments.RequiredMaterialPrtNum" & vbCrLf & _
    "FROM tbl_BOM_Requirments" & vbCrLf & _
    "WHERE tbl_BOM_Requirments.PrtNmber_LinkField = """ & PrtNbrGt & """"
    
  • RecordCount的准确性问题
    DAO记录集刚打开时,RecordCount不一定能返回真实的记录总数,可能只显示1或0。必须先移动到记录集末尾再移回开头,才能拿到准确数值:

    With rstSource
      .MoveLast
      .MoveFirst
      lngCount = .RecordCount
      For lngLoop = 1 To lngCount
        ' 你的后续处理代码
        .MoveNext
      Next lngLoop
    End With
    
  • 额外排查点

    • 加一句Debug.Print PrtNbrGt,打开立即窗口确认Me.SCSPartNumb传递的数值是否正确(是不是你预期的PRT468)。
    • 加一句Debug.Print strSQL,把拼接好的SQL复制到查询生成器里运行,直接验证SQL语法和结果是否符合预期。

内容的提问来源于stack exchange,提问作者sambob_628

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:35:23