问题描述
我想弄清楚为什么以下代码不会从 [卡片查找 1]、2 或 3 返回任何内容。 我知道一些非常基本的 sql,几乎没有 VBA。感谢您的帮助。
Private Sub btnSearch_Click()
Dim sql As String
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 '*" & Me.txtkeywords & "*' " _
& "OR [Last Name] LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 1] LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 2] LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 3] LIKE '*" & Me.txtkeywords & "*' " _
& "OR ID LIKE '*" & Me.txtkeywords & "*' " _
& "ORDER BY [Master List].[Last Name] "
Me.subUserSearch.Form.RecordSource = sql
Me.subUserSearch.Form.Requery
End Sub
[First Name] = Short Text
[Last Name] = Short Text
[Card Lookup 1] = Number
[Card Lookup 2] = Number
[Card Lookup 3] = Number
[ID] = AutoNumber
预期:用户输入与卡片关联的姓名或号码 根据输入的姓名或号码返回匹配项。在原始代码中,除了 Card Lookup 1、2 或 3 之外,它返回每个字段都很好。更改通配符后,它无法返回任何数据。
卡片查找 1,2 和,3 被分配了身份证号码。
解决方法
缺少一个空格:
& "FROM [Master List]" _
& "WHERE [First Name] LIKE '*" & Me.txtkeywords & "*' " _
... 结果:
FROM [Master List]WHERE [First Name] LIKE '*foo*'
在此处插入空格:
& "FROM [Master List] " _
您知道 VBA 编辑器中的调试控制台吗?对于调试,第一步总是查看结果:
debug.print SQL
此外,您可能希望添加错误处理,以便您可以在调试控制台中查看导致空结果的实际错误消息:
Private Sub xxx()
on error goto fErr
' query action here
fExit:
' do your cleanups here
exit sub
fErr:
debug.print err.description
resume fExit
End Sub
,
如此处所述:How to use LIKE condition in SQL with numeric field?
如果不将值转换为字符串(例如,通过将其值与 '' 连接),则不能将 Like
与数字字段一起使用
Private Sub btnSearch_Click()
Dim SQL As String
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 '*" & Me.txtkeywords & "*' " _
& "OR [Last Name] LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 1] & '' LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 2] & '' LIKE '*" & Me.txtkeywords & "*' " _
& "OR [Card Lookup 3] & '' LIKE '*" & Me.txtkeywords & "*' " _
& "OR ID LIKE '*" & Me.txtkeywords & "*' " _
& "ORDER BY [Master List].[Last Name] "
Me.subUserSearch.Form.RecordSource = SQL
Me.subUserSearch.Form.Requery
End Sub