MS Access:如何根据子窗体中的字段打开表单

时间:2013-09-22 16:22:29

标签: ms-access subform

我有一个Table table_clients和一个连接表(1 - >很多)table_invoices。

我有两种形式:

form1(table_clients):具有subform1(table_invoices)的所有客户:每个客户的所有发票

form2和subform2是相同的,只是对象在页面上的放置方式不同。

我希望当我在form1 / subform1上打开一条记录时,能够单击一个按钮并打开由invoice_id和client_id过滤的form2 / subform2。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容打开子表单,设置过滤器,然后指定过滤器。

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_idclient_id被假定为数字。 table_clients表单包含名为txtClientID的文本字段。假设txtClientID字段引用table_clients的主键,client_id中的table_invoices字段是相应的外键。

如果您点击cmdOpenSubForm按钮,结果是:

  • table_invoices表格将被打开
  • 将过滤table_invoices以显示所有发票记录 对于client_id中当前存在的table_clients 形式

如果要进一步限制发票记录,请将其添加到过滤器。