在不传递超过 1 个参数的情况下执行此操作的一种方法是将摘要放在子报告中,并通过按下按钮显示该子报告。不幸的是,页脚中的子报告在访问中存在错误,因此您必须手动过滤子报告。我们从一个类似的简单规范化数据库开始:
然后我添加了一个简单的表单,其中包含一个家庭的多选列表框和一个打开过滤报告的按钮。
Private Sub cmdSearch_Click()
'Build Filter for report
Dim strFilter As String
Dim firstselectedfamily As Boolean
firstselectedfamily = True
For i = 0 To lstFamilys.ListCount - 1
If lstFamilys.Selected(i) = True Then
If firstselectedfamily = True Then
strFilter = "FamilyFK = " & lstFamilys.Column(0, i)
firstselectedfamily = False
Else
strFilter = strFilter & " OR FamilyFK = " & lstFamilys.Column(0, i)
End If
End If
Next i
'open report with filter
DoCmd.OpenReport "ExampleReport", acViewReport, "", strFilter, acNormal
End Sub
这是带有按钮的 ExampleReport,用于显示重复项的摘要:
该按钮根据查找重复项的查询显示隐藏的子报告:
重复查询是通过基于 family 和 test 的分组进行的,其中 familyID 和 TestID 的计数至少为 1:
通常摘要报告将通过主子关系链接到主报告,但摘要在主报告中看起来很自然报告页脚,其中子报告碰巧被窃听并且没有正确过滤。为了解决这个错误,我们提供了过滤摘要报告的代码:
Private Sub cmdSummary_Click()
'filter summary form by using the main reports filter
Me.subfrmSummary.Report.Filter = Me.Filter
Me.subfrmSummary.Report.FilterOn = True
Me.subfrmSummary.Requery
'show/hide summary form
If Me.subfrmSummary.Report.Visible = False Then
Me.subfrmSummary.Report.Visible = True
Else
Me.subfrmSummary.Report.Visible = False
End If
End Sub
同样,要解决这个错误,不要将子报告链接到具有主/子关系的主报告。而是使用代码设置过滤器。