0

我在 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
4

1 回答 1

0

解决此问题的最简单方法是在链接到表格形式的查询中包含要过滤的公司名称。就像是:

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

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

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

关于您提供的代码的一点说明:
您应该像您一样小心地构建过滤器:如果用户键入 a ",您的过滤器查询将中断。您应该转义用户的输入并对其进行一些清理。
至少做一个mQuery1 = Replace(Text22, """", "")
同样,如果用户使用 a 开始/结束他的过滤器*,则查询可能无法正常工作。

于 2013-04-05T02:41:46.663 回答