Access VBA搜索查询无法返回Card Lookup字段匹配结果问题求助
问题原因
- 字段类型不匹配:[Card Lookup 1]、[Card Lookup 2]、[Card Lookup 3]三个字段为数字类型,
LIKE是专门用于文本匹配的运算符,直接对数字类型字段执行LIKE匹配时,数据库不会自动做类型转换,因此无法命中结果。 - 通配符适配问题:Access数据库的SQL通配符分两种场景,使用DAO接口时通配符为
*,使用ADO接口时通配符为%,切换通配符后全量无结果就是因为通配符和当前数据库接口不匹配。
修复方案
直接修改VBA里拼接的SQL语句,用CStr()函数把数字字段强制转换为文本类型后再执行LIKE匹配即可,同时保持你原来的通配符和当前使用的接口匹配即可。额外增加了关键词单引号转义逻辑,避免用户输入含单引号的内容时SQL语法报错。
Private Sub btnSearch_Click() Dim SQL As String ' 处理输入关键词的单引号转义 Dim keyWord As String keyWord = Replace(Me.txtkeywords, "'", "''") SQL = "SELECT [Master List].[First Name], [Master List].[Last Name], [Master List].[Card Lookup 1], [Master List].[Card Lookup 2], [Master List].[Card Lookup 3], [Master List].ID " _ & "FROM [Master List] " _ & "WHERE [First Name] LIKE '*" & keyWord & "*' " _ & "OR [Last Name] LIKE '*" & keyWord & "*' " _ & "OR CStr([Card Lookup 1]) LIKE '*" & keyWord & "*' " _ & "OR CStr([Card Lookup 2]) LIKE '*" & keyWord & "*' " _ & "OR CStr([Card Lookup 3]) LIKE '*" & keyWord & "*' " _ & "OR CStr(ID) LIKE '*" & keyWord & "*' " _ & "ORDER BY [Master List].[Last Name] " Me.subUserSearch.Form.RecordSource = SQL Me.subUserSearch.Form.Requery End Sub
如果修改后依然无法匹配到结果,可以把代码中所有通配符*统一替换为%再测试,适配你的Access接口类型即可。
内容的提问来源于stack exchange,提问作者James Fleming
相关产品推荐
相关产品推荐

