MS Access:如何过滤非报告字段的报告?

时间:2013-11-22 21:40:38

标签: ms-access

我在8年内没有与Access合作过 - 我相信我忘记的比以往任何时候都多。有人要我修改报告,以便当前显示所有图纸的图纸清单将列出特定客户(或所有客户)的图纸。

我找到了报告使用的嵌套查询,并修改了内部查询以接受参数(第一个错误?)。然后我添加了一个新表单来显示客户名称并检索关联的主键customerId。现在我需要将客户ID从表单提供给报表。 DoCmd.OpenReport并添加whereCmd似乎与where参数的条件不匹配。

因此,我删除了查询中的参数,并尝试仅指定条件。只有外部查询不知道customerId是什么。我是否需要在内部查询和外部查询中公开它,然后才在最终报告中使用它,以便我可以在where子句中过滤它?

他们有其他示例代码在启动报表之前使用表单中的VBA来重建查询(添加任何过滤条件)。当然这不是推荐的做法,可以吗?

2 个答案:

答案 0 :(得分:2)

在报告的记录源中包含过滤器字段。然后,您可以在打开报告时对该字段进行过滤。

DoCmd.OpenReport "rptFoo", View:=acViewPreview, _
    WhereCondition:="[id]=1"

WhereCondition 中使用的记录源字段不必由任何报告的控件显示...只要它存在于记录源中,它就可以在 WhereCondition

答案 1 :(得分:0)

我会在OpenArgs的报告中抛出这个。从表单中,执行以下操作:

DoCmd.OpenReport strReportName, , , , , Me.CustomerID

然后,在报告的Load事件中,阅读OpenArgs并更改报告的RecordSource:

Me.RecordSource = "SELECT * FROM MyTable WHERE CustomerID = '" & Me.OpenArgs & "'"

这是“aircode”,可能需要稍微调整一下,但它应该让你非常接近。显然,如果CustomerID是INT字段,请在报告Load事件中从SQL中删除单引号。