MS Access:如何根据子表单中的字段打开表单
Posted
技术标签:
【中文标题】MS Access:如何根据子表单中的字段打开表单【英文标题】:MS Acess: How to open form depending on field in subform 【发布时间】:2013-09-22 16:22:29 【问题描述】:我有一个表 table_clients 和一个连接表 (1-->many) table_invoices。
我有两种形式:
form1(table_clients):所有带有 subform1(table_invoices) 的客户:每个客户的所有发票
form2 和 subform2 相同,只是对象在页面上的放置方式不同。
我希望当我在 form1/subform1 上打开记录时,能够单击按钮并打开按 invoice_id 和 client_id 过滤的 form2/subform2。
谢谢!
【问题讨论】:
【参考方案1】:您可以使用以下内容打开子表单,设置过滤器,然后指定过滤器。
Private Sub cmdOpenSubForm_Click()
DoCmd.OpenForm "table_clients"
Forms!table_invoices.FilterOn = True
Forms!table_invoices.Filter = "client_id = " & [txtClientID].value
End Sub
另外,如果子表单在主表单上的记录发生更改时打开,您可能需要在子表单上重新应用过滤器,然后刷新。这将在主窗体的On Current
事件中完成:
Private Sub Form_Current()
On Error Resume Next
Forms!table_invoices.Filter = "client_id = " & [txtClientID].value
Forms!table_invoices.Refresh
End Sub
在上面的示例中,您必须有一个名称为 cmdOpenSubForm
的按钮。子表单必须命名为table_invoices
。该按钮必须位于table_clients
表单上。 On Current 代码应位于table_clients
表单上。 invoice_id
和 client_id
假定为数字。 table_clients
表单包含一个名为 txtClientID
的文本字段。假设txtClientID
字段引用了table_clients
的主键,table_invoices
中的client_id
字段是对应的外键。
如果您点击cmdOpenSubForm
按钮,结果会是:
table_invoices
表单将打开
table_invoices
将被过滤以显示所有发票记录
对于当前存在于table_clients
中的client_id
表格
如果您想进一步限制发票记录,而不是添加到过滤器中。
【讨论】:
您好,我收到运行时错误 438:对象不支持此属性或方法。此外,client_id 位于 invoice_id 的父表单上。不应该以某种方式说明吗?谢谢! 我更新了我的答案。我有一个错误应该有一个!
在Forms 和table_invoice 之间而不是.
我还添加了一个更好的解释。希望它有所帮助。以上是关于MS Access:如何根据子表单中的字段打开表单的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 保留子表单中的 ID 字段,填充父表单中的 ID