【问题标题】:Access DB. VBA Query访问数据库。 VBA 查询
【发布时间】:2021-08-06 23:46:58
【问题描述】:

我试图弄清楚为什么以下代码不会从 [Card Lookup 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 之外的所有字段。更改通配符后,它无法返回任何数据。

Card Lookup 1,2 和,3 被分配了 ID 卡号。

【问题讨论】:

标签: sql vba ms-access-2013


【解决方案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

【讨论】:

  • 感谢您看到这个空间。我不知道调试控制台。第一次真正使用 Access...
  • @JamesFleming 如果您喜欢这个答案,请考虑接受它。谢谢!
【解决方案2】:

如此处所述: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

【讨论】:

  • 谢谢。我明白这应该如何工作。应用更改后。我输入“371”。它在 ID 字段中正确返回包含“371”的值,但仍然没有从 Card Lookup 字段返回任何内容。
  • 我不是访问用户,所以您的“查找”字段可能存在一些特定的问题,这是一个问题?它们只是“常规”数字字段吗?
  • 在设计视图中,它们被列为数字,字段大小为长整数。
  • 您使用的关键字是与查找的“id”还是“value”匹配?
  • 我认为我没有完全理解这个问题。但是,我认为它应该是价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多