如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?
Posted
技术标签:
【中文标题】如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?【英文标题】:how do I filter a subform from a combobox that is loctated in another subform in access? 【发布时间】:2016-12-30 18:31:30 【问题描述】:我找到了很多关于如何从父表单中过滤子表单的教程和问题和答案,但是我无法找到一种方法来过滤带有位于完全不同的子表单中的组合框的子表单?
Private Sub Combo51_AfterUpdate()
Me.Parent!Address.Form.Filter!Address2.Value = Combo51.Value
End Sub
我得到一个需要的对象错误
Address2 在地址表单中链接到我的 companyID(control Source) Combo51 持有公司 ID 值
Combo51 位于 CompanyInformation 子表单上,Address2 位于 Address 子表单上
companyinformation 表单是父表单 Called Quotes 的子表单。所以引号是我的主要形式,有两个子形式 CompanyInformation 和 Address。父表单的Id表单链接到CompanyInformation;现在我想使用combobox51 中的companyID 从公司信息过滤到地址表单。
我成功地将文本和组合框从子表单更新到子表单,但我只是不太了解过滤器方法。任何帮助将不胜感激。
我正在使用地址表单的记录源查询
【问题讨论】:
您能否详细介绍一下您的表单设计和表格结构?您可能需要类似于Me.Parent!Address.Form.Filter = "companyID = " & Combo51
的内容,尽管从您有限的描述中看起来您可能根本不需要子表单 - 您是否显示单个公司的多个地址/CompanyInformation 记录?
我试过上面的代码没有错误,但它不起作用。我为每个公司显示多个地址。也有多家公司的多个报价。我需要能够浏览所有公司的所有不同地址以及那里的报价。因此,我将显示单个公司的多个地址/CompanyInformation 记录。
抱歉,仍然无法理解您的数据结构。请提供表格和关系以使这一点更清楚,并允许其他人提供帮助。当您谈论“多个公司的多个地址”和“多个公司的多个报价”时,这些都是多对多的关系吗?一家公司可以有多个地址吗?一个地址可以与多家公司相关吗?一份报价可以涉及多家公司吗?一家公司可以得到多个报价吗?我猜这些问题的答案并不全是“是”!
我有一个 tblQuotes,它有一个主键 QuoteID,它与 tblCustomerNamesFromQuotes 有一对多的关系。然后 tblCompanyNames 有一个主键 CustomerNameID 并且它与 tblCustomerNamesFromQuotes 也有一对多的关系。所以一个客户可以有很多报价,一个报价可以有很多客户。
接下来我还有另外两个表 tbl AddressType 和 tblCustomerAddressesFromQuotes。 tblCAFQ 现在有三个主键,首先是 AddressID,然后是来自 tblCompanyNames 的 CompanyID,最后是来自 tblAddressType 的 AddressTypeID。表地址类型有一个名为 AddressTypeId 的主键,它引用它是帐单地址还是送货地址或两者兼而有之。我目前没有为这些表建立任何关系,因为我在表单上的数据输入中遇到错误。
【参考方案1】:
我对你的设计很感兴趣。我必须说,在报价和公司之间建立多对多关系是不寻常的,但如果这是你需要的,那就去吧! [编辑:只需阅读您最新的 cmets,我就能明白您为什么现在这样做了。] 但是我担心 tblCAFQ 中的“3 个主键”。我将其解释为由三列 AddressID、CompanyID 和 AddressTypeID 组成的“复合主键”,在这种情况下,我希望这三个 ID 也是其他表的外键。您已经确定 CompanyID 和 AddressTypeID 确实是外键,分别指向 tblCompanyNames 和 tblAddressType,但是您没有说 AddressID 指向的位置。我怀疑 AddressID 实际上是 the 主键,而其他两个 ID 应该只是外键。无论如何,除此之外,从您迄今为止发布的信息来看,我认为您需要的是
Private Sub Combo51_AfterUpdate()
Me.Parent!Address.Form.Filter = "CompanyID = " & Combo51
Me.Parent!Address.Form.FilterOn = True
Me.Parent!Address.Form.Requery 'You might not need this, I can't remember if it happens automatically after setting FilterOn = True
End Sub
这是假设 Combo51 的绑定列正在获取 CompanyInformation 子表单上的 CompanyID(来自 tblCustomerNamesFromQuotes)?
【讨论】:
我还是不能让它工作,我已经完成了访问!!!感谢您的帮助,但这是一个接一个的路障。它做了一些好事,但是伙计!哦,就我的多对多报价和客户而言,我不确定我是否要使用它,但逻辑是这样的。我们是做工业绘画的工厂。有时我们会为将工作外包给我们的公司引用一个项目。所以 A 公司从 B 公司那里得到了一份工作来建造一些东西。A 公司完成了它的建造,然后让我们给它涂漆。报价是针对 A 公司的,但知道它最终是 B 会派上用场 很抱歉听到这个消息。我知道 Access 有时可能有点“古怪”,但您必须记住,它主要是一个关系数据库系统(具有内置的表单和报表设计器),因此您确实需要正确设置数据模型让您的表单设计更轻松。失去多对多报价-客户关系的一种可能方法是使用 tblProject 来描述项目并记录最终客户是谁(B)。然后每个项目可以有许多行情;根据您记录的每个报价,您直接为谁工作 (A)。然后是一个 QuoteDetails 表,每个部分一个。 我认为我最大的问题是我的数据模型我目前正在尝试重做它以使其更有意义,我只是先跳入数据库。我想我会选择 tblProject 似乎更合乎逻辑。我决定重建我的访问数据库,并希望通过更好的设计消除问题【参考方案2】:也尝试打开过滤器:
Private Sub Combo51_AfterUpdate()
Me.Parent!Address.Form.Filter = "Address2 = '" & Me!Combo51.Value & "'"
Me.Parent!Address.Form.FilterOn = True
End Sub
【讨论】:
我尝试了上面的代码,但是有一个窗口用于输入过滤器的值 那么你可能没有一个名为 Address2 的字段。以上是关于如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?
如何将数据从子视图传递到父视图到 SwiftUI 中的另一个子视图?