0

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

我有两种形式:

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

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

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

谢谢!

4

1 回答 1

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_clientsclient_idin 字段table_invoices是对应的外键。

如果您要单击该cmdOpenSubForm按钮,结果会是:

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

如果您想进一步限制发票记录而不是添加到过滤器中。

于 2013-09-23T03:14:00.123 回答