Ms Access基于无界文本框值跳转对应记录的VBA代码异常问询
模糊匹配代码失效排查及修复方案
常见失效原因
- 输入特殊字符未转义:当textbox2输入的内容包含单引号
'时,拼接的查询语法会直接报错,这是最常见的失效原因 - 缺少空值判断:当前代码未做空值校验,若textbox2为空时触发更新,会执行
Like '**'逻辑,不符合预期 - 通配符不匹配:如果你的Access开启了ANSI-92 SQL兼容模式(通常是链接了外部SQL Server数据库时会配置),DAO的
FindFirst方法需要用%而非*作为通配符 - 字段名拼写错误:检查数据源中的商品名称字段是否确实为
ITEMNAME,是否存在拼写偏差 - 记录集状态异常:可在执行
FindFirst前先确认全局rs对象未被意外释放
修复后的代码
Private Sub textbox2_AfterUpdate() ' 先做空值判断,无输入时直接退出 If (Me.textbox2 & vbNullString) = vbNullString Then Exit Sub ' 转义输入中的单引号,避免语法错误 Dim strSearch As String strSearch = Replace(Me.textbox2, "'", "''") ' 拼接查询条件,若用ANSI92模式把*换成%即可 rs.FindFirst "[ITEMNAME] Like '*" & strSearch & "*'" If rs.NoMatch Then Me.pmItem.SetFocus Else Me.Recordset.Bookmark = rs.Bookmark End If End Sub
调试方法
如果修改后依然不生效,可以在rs.FindFirst行前加一行Debug.Print "[ITEMNAME] Like '*" & strSearch & "*'",触发事件后按Ctrl+G打开VBA编辑器的立即窗口,查看输出的查询条件是否符合预期,可直接复制输出的条件到Access查询的SQL视图中测试是否能查到对应记录。
内容的提问来源于stack exchange,提问作者newbieDB Builder
相关产品推荐
相关产品推荐

