MS Access:如何过滤非报告字段的报告?
Posted
技术标签:
【中文标题】MS Access:如何过滤非报告字段的报告?【英文标题】:MS Access: How to filter report on non-report field? 【发布时间】:2013-11-22 21:40:37 【问题描述】:我已经 8 年没有使用 Access 了——我相信我忘记的比我所知道的要多。有人要求我修改一份报告,以便当前显示所有图纸的图纸列表将列出特定客户(或所有客户)的图纸。
我找到了报表使用的嵌套查询,并修改了内部查询以接受一个参数(第一个错误?)。然后我添加了一个新表单来显示客户名称并检索关联的主键 customerId。现在我需要将表单中的客户 ID 提供给报告。 DoCmd.OpenReport 并添加 whereCmd 似乎与参数的 where 条件不匹配。
因此,我删除了查询中的参数,并尝试仅指定条件。只有外部查询不知道 customerId 是什么。我是否需要在内部查询和外部查询中公开它,然后不要在最终报告中使用它,以便我可以在 where 子句中过滤它?
他们还有其他示例代码,这些代码使用表单中的 VBA 在启动报表之前重建查询(添加任何过滤条件)。这肯定不是推荐的做法,对吗?
【问题讨论】:
" ... 在启动报告之前重建查询(添加任何过滤条件)" 该查询是否用作报告的记录源? 报表的记录源是外层查询,是的。但它是由外部查询调用的内部查询,它能够识别客户。该信息不是内部结果中的字段,因此在外部不可用,因此我认为我无法对其进行过滤。 根据我的阅读,过滤器优于参数查询。好的,我添加了它,我会收回它。但我无法让过滤器工作,我相信这是因为它不是报告记录源中的一个字段。那么,如果我将字段添加到内部查询和外部查询的字段列表中,是否必须在报表中使用?如果没有在报告中使用,我还能对其进行过滤吗? 您可以在报表的记录源中包含一个字段,而不是在任何报表控件中显示它。 您应该将其发布为答案。这是一种享受! 【参考方案1】:在报告的记录源中包含过滤器字段。然后,您可以在打开报告时对该字段进行过滤。
DoCmd.OpenReport "rptFoo", View:=acViewPreview, _
WhereCondition:="[id]=1"
WhereCondition 中使用的记录源字段不必由任何报表控件显示...只要它存在于记录源中,它就可以在 中使用>WhereCondition.
【讨论】:
【参考方案2】:我会把这个扔到 OpenArgs 的报告中。在您的表单中,执行以下操作:
DoCmd.OpenReport strReportName, , , , , Me.CustomerID
然后,在报表的 Load 事件中,读取 OpenArgs 并更改报表的 RecordSource:
Me.RecordSource = "SELECT * FROM MyTable WHERE CustomerID = '" & Me.OpenArgs & "'"
这是“aircode”,可能需要稍作调整,但它应该能让你真正接近。显然,如果 CustomerID 是一个 INT 字段,则在报告 Load 事件中删除 SQL 中的单引号。
【讨论】:
我怀疑如果 OP 无法使用WhereCondition
参数使其工作,那么使用 OpenArgs
就不可能做得更好。
我怀疑我将 where 条件称为错误,但我看不出打开的 args 有什么帮助。它可以在不提示用户的情况下传递参数值吗?再就是所有的文章都说不要在报表和表单记录源中做参数。我会在星期一试一试。
是的,传递 OpenArgs 不会提示用户输入任何内容,您只是通过代码传递变量,所以这一切都在幕后。以上是关于MS Access:如何过滤非报告字段的报告?的主要内容,如果未能解决你的问题,请参考以下文章
如何过滤 3 个文本框,然后在 MS Access VBA 中根据它们运行报告
MS Access:突出显示 MS Access 报告中的特定字段