MS Access:如何在非报表字段中筛选报表



我已经8年没有使用Access了——我相信我忘记的比我所知道的还要多。有人要求我修改报告,以便当前显示所有图形的图形列表将列出特定客户(或所有客户)的图形。

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

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

他们还有其他示例代码,这些代码在表单中使用VBA在启动报表之前重新生成查询(添加任何筛选条件)。这肯定不是推荐的做法,不是吗?

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

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

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

我会把它扔到OpenArgs中的报告中。从你的表格中,做一些类似的事情:

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

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

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

这是"空调",可能需要一点调整,但它应该会让你真正接近。显然,如果CustomerID是INT字段,请在报告Load事件中删除SQL中的单引号。

最新更新