我的问题是双重的。
我需要设置一系列报告,允许用户从下拉框中选择一个县,触发报告运行并仅返回附加到该特定县的记录。
这可以在数据表级别使用逐个过滤器来实现,但这非常笨重,我有几个表/查询需要同一个县过滤器。
我可能会在下面有以下内容:
创建未绑定的表单。 添加一个组合框。 设置组合框的行源以包括县字段。 将其Bound列设置为1。 将其Column Count属性设置为2。 将Column Width属性设置为0“; 1” 将组合框命名为“ChooseCounty”。
向表单添加命令按钮。 按钮的点击事件编码如下:
(注意:要编写代码,请在“表单设计视图”中选择命令按钮。显示按钮的属性表。 单击“事件”选项卡。 在On Click行上,写下:
[活动程序]
点击该行上显示的3个点的小按钮。 代码窗口打开时,光标将在两个已存在的代码行之间闪烁。 在这些行之间,编写以下代码。)
Me.Visible = False
关闭代码窗口。
将此表单命名为“ChooseCounty”。
在作为报告的记录源[县]字段的查询中 标准行,写:
形式!ChooseCounty!ChooseCounty
接下来,编写Report的Open事件: (使用与上述相同的方法)
DoCmd.OpenForm“ChooseCounty”,,,,,, acDialog
对报告的关闭事件进行编码:
DoCmd.Close acForm,“ChooseCounty”
准备好运行报告时,打开报告。 表格将打开并等待公司的选择。 单击命令按钮,然后将运行报告。 报告结束后,它将关闭表单。
我可以说服报告触发表单,但只有一次 - 我似乎无法弄清楚'形式!ChooseCounty!ChooseCounty'的确切位置。也许有人可以澄清或提供更优雅的方式来做到这一点?
~T
答案 0 :(得分:1)
你好像在问两个问题,最后一个问题对我来说很清楚,但第一个问题不是。第二个是关于如何将滤波器级联到子表格。您可以通过以下两种方式之一完成此操作:
将表单控件引用作为标准放在每个子报表的记录源中,或者
在报表上创建一个不可见的控件,因为它的控件源为“= Forms!ChooseCounty!ChooseCounty”。控制“CountyFilter”的名称。然后,将CountyFilter添加到链接属性。例如,如果您要在ID上链接子报表,则需要:
(当然,假设该ID是子报告的链接字段,“县”是子子报告中字段的名称)。
现在,我想知道你为什么不仅在父记录中而且在子记录中有县数据 - 这没有任何意义。如果你有,那么上面的解决方案就可以了。
如果你不这样做,那么我不明白这个问题,因为子报告背后的整个想法是它们被父记录过滤掉了,所以如果父记录是一个人,你按县过滤,你'只会在子报表中获取该人的子记录,根据定义,这些记录已经被COUNTY过滤,因为父级已被过滤。
关于早先的问题,你写道:
我可以说服报告触发 形式,但只有一次 - 我似乎无法 弄清楚究竟在哪里 '形式!ChooseCounty!ChooseCounty' 需要去
您有两种选择:
硬连线报告的记录源以使用表单控件引用,因此报表的WHERE子句将为“WHERE County = Forms!ChooseCounty!ChooseCounty”(并且您应将此设置为文本类型的参数确保它得到正确处理。
更好的meethod是在报告的OnOpen事件中设置记录源。
以对话框打开表单后,您将拥有以下内容:
Me.Recordsource = "SELECT * FROM MyTable WHERE County='" _
& Forms!ChooseCounty!ChooseCounty & "'"
在该行之后,您可以关闭该表单,因为不再需要它。
对于没有返回记录的情况,您可能需要OnNoData事件。这通常很简单:
MsgBox "No records found!"
DoCmd.Close acReport, Me.Name
我希望这能回答你的问题,但如果没有,我很乐意提供更多解释。