使用Access中的内部联接查询过滤表单中的记录

时间:2014-04-15 20:32:00

标签: sql vba filter ms-access-2013

My Access 2013数据库有两个主要表格;客户和网站。 Sites表具有指向Customer记录的外键。我正在使用未绑定的文本框和命令按钮在“站点表单”中构建搜索框。按下按钮后,它应根据搜索条件和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,查询表达式中的语法错误”

使用Debug Print,看起来我写的查询表达式很好,看起来就像我在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表单中的记录?

我的目标是能够在引用Customers表中的Customer名称时搜索Sites表中的记录,因为在Sites表中搜索客户名失败,因为它是指向Customers的外键表

预先感谢您的协助!

1 个答案:

答案 0 :(得分:0)

好的,经过更多的谷歌搜索,我发现一个网站告诉我,我不能在一个表格中使用多个表,而不是在查询基础上。

这就是我的所作所为:

我做了一个名为qrySites的查询,它执行了此操作:

SELECT * FROM tblMainSites INNER JOIN tblMainCustomers ON tblMainSites.Customer = tblMainCustomers.CustomerID;

这为我提供了一个记录集,其中CustomerIDCustomer名称相关联。然后我将表单frmSites的记录源更改为此新查询,并更新了相应的控件源。

然后,搜索功能会过滤以下记录:

Private Sub cmdSearch_Click()

Dim strFilter As String

strFilter = "tblMainCustomers.Customer LIKE ""*" & Me.txtSearch & "*"""

If IsNull(Me.txtSearch) Then
    Me.Filter = "" 'Clears filter if text box is blank when searching
    Me.FilterOn = False
Else
    Me.Filter = strFilter
    Me.FilterOn = True
End If

End Sub

这为Me.Filter方法提供了正确的输入,这只是SQL查询字符串的Where子句。

我测试了它,搜索工作正常。该表单还通过查询将任何更改传递到适当的表,但我必须检查我的控件源和表中的一些字段共享名称。