Access如何校验表单文本框输入值是否存在于表指定字段
Access表单编码重复校验VBA代码问题修复
核心问题说明
你的代码存在4个明显问题,导致逻辑无法正常运行:
- SQL语句语法错误:表名
[BookingTable]和WHERE关键字之间缺少空格,执行时会直接抛出语法异常 - 逻辑判断错误:你仅定义了SQL查询字符串,没有实际执行查询获取数据库中的匹配结果,直接将SQL字符串和输入的编码做比对,该判断永远不成立,所以弹窗永远不会触发
- 兼容性问题:使用
.Text属性读取文本框值,只有当文本框处于焦点状态时才能正常读取,失去焦点时会报错 - 安全性问题:未对输入的编码做单引号转义,若输入内容包含单引号会导致SQL语法错误
修复后代码
' 获取文本框输入值,空值转换为空字符串避免异常 Dim ecode As String ecode = Nz(Me!Code.Value, "") ' 转义输入值中的单引号,避免SQL语法报错 ecode = Replace(ecode, "'", "''") ' 用DCount直接统计匹配记录数,无需手动执行SQL打开记录集 If DCount("Code", "BookingTable", "Code = '" & ecode & "'") > 0 Then MsgBox "输入的编码已被使用", vbInformation, "提示" ' 可选配置:校验不通过时将焦点切回编码输入框 Me!Code.SetFocus End If
逻辑说明
DCount是Access内置的域聚合函数,可直接统计符合条件的记录数,相比手动拼接SQL打开记录集的写法更简洁,也不需要额外处理记录集关闭、资源释放的问题,稳定性更高。
内容的提问来源于stack exchange,提问作者Amit jha
相关产品推荐
相关产品推荐

