【发布时间】:2014-05-30 09:52:23
【问题描述】:
我的 Access 2013 数据库有两个主表;客户和网站。 Sites 表有一个指向客户记录的外键。我正在将搜索框构建到带有未绑定文本框和命令按钮的站点表单中。按下按钮后,它应该根据搜索条件和 VBA 代码过滤记录。我需要能够通过位于通过外键链接的单独表中的客户名称进行搜索。到目前为止,这是我的按钮代码:
Private Sub cmdSearch_Click()
Dim strSQL As String
strSQL = "SELECT * FROM tblMainSites " & _
"INNER JOIN tblMainCustomers " & _
"ON tblMainSites.Customer=tblMainCustomers.CustomerID " & _
"WHERE tblMainCustomers.Customer LIKE '*" & Me.txtSearch & "*'"
If IsNull(Me.txtSearch) Then
Me.Filter = ""
Me.FilterOn = False
Else
Debug.Print strSQL
Me.Filter = strSQL
Me.FilterOn = True
End If
End Sub
问题是每次我尝试过滤记录时,都会得到以下信息:
“运行时错误 3075,查询表达式中的语法错误”
使用调试打印,看起来我写的查询表达式很好,看起来就像我在 Access 中构建的工作查询:
SELECT * FROM tblMainSites INNER JOIN tblMainCustomers ON tblMainSites.Customer=tblMainCustomers.CustomerID WHERE tblMainCustomers.Customer LIKE '*Affinity*'
我的问题是:我是否正确使用了 Me.Filter 方法?我找不到任何使用完整 SQL 字符串的示例。我也尝试过使用 OpenArgs 作为字符串的 DoCmd.OpenForm 方法,但也无济于事。
问另一种方式,有没有办法使用 JOIN 查询过滤 Access 表单中的记录?
我的目标是能够在引用客户表中的客户名称时在站点表中搜索记录,因为在站点表中搜索客户名称失败,因为它是指向客户的外键表。
提前感谢您的帮助!
【问题讨论】:
-
当您对访问数据库运行生成的 sql 时会发生什么?
-
实际上,现在我意识到,您可能需要做的就是将您的过滤器设置为
Customer LIKE '*" & Me.txtSearch & "*'"Me已经有数据库,您不是在查询,而是在过滤。所以只需将过滤器设置为where部分。 -
你找到答案了吗?
-
paqo,对数据库运行生成的 SQL 会返回我想要的记录。将筛选器值设置为筛选器的 where 部分不起作用,因为值 CustomerName 不在 Sites 表中。站点表中的唯一链接是客户 ID。
-
啊,是的,您无法过滤不存在的内容。 :) 很高兴你明白了。
标签: sql vba filter ms-access-2013