0

我的问题是双重的。

  • 我在数据库中有大约 20 个分类表。餐桌布局多样;一个共同点是它们都有一个“县”字段。

我需要设置一系列报告,允许用户从下拉框中选择一个县,触发报告运行并仅返回附加到该特定县的记录。

这在数据表级别使用按表单过滤是可行的,但这非常笨拙,我有几个表/查询需要这个相同的县过滤器。

我可能已经完成了以下几点:


创建一个未绑定的表单。添加一个组合框。将组合框的行来源设置为包括县字段。将其 Bound 列设置为 1。将其 Column Count 属性设置为 2。将 Column Width 属性设置为 0";1" 将组合框命名为“ChooseCounty”。

将命令按钮添加到窗体。对按钮的单击事件进行编码,如下所示:

(注意:要编写代码,在 Form Design View 中选择命令按钮。显示按钮的属性表。单击 Event 选项卡。在 On Click 行上,编写:

【活动流程】

单击该行上显示的带有 3 个点的小按钮。当代码窗口打开时,光标将在两行已经存在的代码之间闪烁。在这些行之间,编写以下代码。)

Me.Visible = 假

关闭代码窗口。

将此表单命名为“ChooseCounty”。

在作为报告的记录源 [County] 字段条件行的查询中,写入:

表格!ChooseCounty!ChooseCounty

接下来,对 Report 的 Open 事件进行编码:(使用与上述相同的方法)

DoCmd.OpenForm "ChooseCounty", , , , , acDialog

对报表的关闭事件进行编码:

DoCmd.Close acForm, "ChooseCounty"

准备好运行报告时,打开报告。表格将打开并等待公司选择。单击命令按钮,然后报告将运行。当报表关闭时,它将关闭表单。


我可以说服报告触发表单,但只有一次 - 我似乎无法弄清楚“表单!ChooseCounty!ChooseCounty”需要去哪里。也许有人可以澄清或提供更优雅的方式来做到这一点?

  • 我需要在所有表格上设置一个包含子报告的大型元报告 - 并且,使用相同的下拉“选择县”表单,我需要让该选择在所有子报告中级联。我不知道该怎么做。欢迎提出建议!

〜T

4

1 回答 1

1

您似乎在问两个问题,最后一个我很清楚,但第一个不是。第二个是关于如何将过滤器级联到子表单。您可以通过以下两种方式之一执行此操作:

  1. 将表单控件引用作为标准放在每个子报表的记录源中,或者

  2. 在具有控制源“=Forms!ChooseCounty!ChooseCounty”的报表上创建一个不可见的控件。将该控件命名为“CountyFilter”。然后,将 CountyFilter 添加到链接属性。例如,如果您要链接 ID 上的子报表,您将拥有:

    • LinkMaster: ID;CountyFilter
    • LinkChild: ID;County

(当然,假设 ID 是子报表的链接字段,而“县”是子子报表中的字段名称)。

现在,我想知道为什么不仅在父记录中而且在子记录中都有县数据——这是没有意义的。如果您确实拥有它,那么上面的解决方案将起作用。

如果你不这样做,那么我不明白这个问题,因为子报表背后的整个想法是它们被父记录过滤,所以如果父记录是一个人,而你按 COUNTY 过滤,你只是将在子报表中为该人获取子记录,根据定义,这些子记录已经被 COUNTY 过滤,因为父项已被过滤。

至于前面的问题,你写:

我可以说服报告触发表格,但只有一次 - 我似乎无法弄清楚“表格!ChooseCounty!ChooseCounty”需要去哪里

你有两个选择:

  1. 硬连线报表的记录源以使用表单控件引用,因此报表的 WHERE 子句将是“WHERE County=Forms!ChooseCounty!ChooseCounty”(并且您应该将其设置为文本类型的参数以确保它得到处理正确)。

  2. 更好的方法是在报告的 OnOpen 事件中设置记录源。

将表单作为对话框打开后,您将看到如下内容:

Me.Recordsource = "SELECT * FROM MyTable WHERE County='" _
  & Forms!ChooseCounty!ChooseCounty & "'"

在该行之后,您可以立即关闭表单,因为不再需要它。

对于没有返回记录的情况,您可能需要一个 OnNoData 事件。这通常很简单,例如:

  MsgBox "No records found!"
  DoCmd.Close acReport, Me.Name

我希望这能回答您的问题,但如果没有,我很乐意提供更多解释。

于 2009-06-13T13:46:40.927 回答