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
相关产品推荐
相关产品推荐

