访问数据库。 VBA 查询

时间:2021-05-17 17:22:30

标签: sql vba ms-access-2013

我想弄清楚为什么以下代码不会从 [卡片查找 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 被分配了身份证号码。

2 个答案:

答案 0 :(得分:1)

缺少一个空格:

& "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

答案 1 :(得分:1)

如此处所述: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
相关问题