为何MS Access中两个相似的VBA子过程运行结果不同?
MS Access VBA FindFirst 搜索失效故障分析
核心故障原因
- 通配符类型错误:代码(B)中使用了**全角的「*」作为LIKE运算符的通配符,而Access的SQL语法仅识别半角的「*」**作为任意字符匹配通配符。全角星号会被当作普通字符处理,导致搜索条件变成匹配包含「*目标内容*」的字段值,自然找不到实际存在的内容。
代码对比验证
对比代码(A)和(B)的关键条件语句:
- 代码(A)(正确):
criteria = "Ecrits.Nom like " & scQ & "*" & rEcrvain & "*" & scQ - 代码(B)(错误):
criteria = "Ecrit like " & scQ & "*" & rEcrit & "*" & scQ
修复方案
将代码(B)中的全角「*」替换为半角「*」,即使加上表名前缀Ecrits.Ecrit,只要通配符错误,问题依然存在。修复后的条件语句如下:
criteria = "Ecrits.Ecrit like " & scQ & "*" & rEcrit & "*" & scQ
额外注意事项
- 如果表单记录集基于多表查询,字段引用必须使用
表名.字段名格式避免歧义,这一点代码(A)处理正确,但并非本次故障的诱因。 - 可通过
Debug.Print rEcrit在VBA立即窗口验证Trim(Me![s_ecrit])获取的内容是否存在不可见字符(如空格、换行),避免额外干扰。
内容的提问来源于stack exchange,提问作者Kwari JEONG
相关产品推荐
相关产品推荐

