Access 2007使用外键按表单上的文本进行过滤

时间:2013-04-04 10:11:37

标签: ms-access

我在Microsoft Access 2007中创建了一个表格形式。在表单上是一个文本框,我希望过滤表单中的项目。

问题是表单中的一个字段是外键,它引用一个包含公司名称的链接表。

当我运行下面的代码,并在文本框中输入公司名称+点击返回时,我只能搜索与公司名称对应的数值:

Private Sub Text22_AfterUpdate()
Dim mFilter As String
Dim mQuery1 As String

If IsNull(Me.Text22) Then
    mQuery1 = ""
Else
    mQuery1 = Me.Text22
End If

mFilter = "[ID] Like ""*" & mQuery1 & "*"""
mFilter = (mFilter + " OR ") & "[Supplier] Like ""*" & mQuery1 & "*"""

temp = MsgBox(mFilter, vbOKOnly)

Me.Filter = mFilter
Me.FilterOn = True
Me.Requery
End Sub

1 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是在链接到表格表单的查询中包含要筛选的公司名称。 类似的东西:

SELECT Invoice.ID, 
       Invoice.Amount, 
       Invoice.SupplierID,
       Supplier.CompanyName
FROM   Invoice
  INNER JOIN Supplier ON Supplier.ID = Invoice.SupplierID

然后,如果您不想显示字段CompanyName,则始终可以在数据表格中隐藏该列。
我通常会隐藏ID报告,因为我只使用它们来识别数据库内部的记录并建立外来关系,每个表的ID永远不会显示给我的用户。

如果您的表单的连线方式不同,请修改您的问题,提供更多信息和截图,以便我们更准确地回答您。

关于您提供的代码的小评论:
您应该像过滤一样谨慎构建过滤器:如果用户键入",您的过滤器查询将会中断。你应该逃避用户的输入并稍微消毒它 至少做mQuery1 = Replace(Text22, """", "") 同样,如果用户使用*开始/结束其过滤器,则查询可能无效。