Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Access 2007使用外键按表单上的文本筛选_Ms Access - Fatal编程技术网

Ms access Access 2007使用外键按表单上的文本筛选

Ms access Access 2007使用外键按表单上的文本筛选,ms-access,Ms Access,我在MicrosoftAccess2007中创建了一个表格。表单上有一个文本框,我希望过滤表单中的项目 问题是表单中的一个字段是外键,它引用了包含公司名称的链接表 当我运行下面的代码,并在文本框中键入公司名称+点击回车键时,我只能搜索与公司名称对应的数值: Private Sub Text22_AfterUpdate() Dim mFilter As String Dim mQuery1 As String If IsNull(Me.Text22) Then mQuery1 = ""

我在MicrosoftAccess2007中创建了一个表格。表单上有一个文本框,我希望过滤表单中的项目

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

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

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

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

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,“,”)

类似地,如果用户以
*
开始/结束其过滤器,则查询可能无法工作