我有一个现有的Access MDB。我正在向运行现有报表的现有表单添加命令按钮。所做的更改是此按钮需要传入一个参数,该参数包含报告的记录的ID - 当前报告在MDB中的每条记录上运行。
我已经更改了运行报告的查询以使用ID值的参数,因此现在当单击按钮时,Access会提示输入要记录的记录ID,并且报告显示应该如此。< / p>
但是,我不能为我的生活弄清楚如何将参数传递给报告以供查询使用。我怎么能这样做?
答案 0 :(得分:21)
DoCmd.OpenReport方法有各种参数,其中一个是Where语句:
DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID
那是
expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
答案 1 :(得分:3)
我对此类问题的一般处理方法是将条件保存在数据库中,通常是具有一行的控制表。然后,为了引用您的标准,您将查询放在paranthesis中,返回一个您想要的标准值。在你的情况下,它会是这样的:
(select reportID from control)
此技术的优点是控制表会记住下次运行报告时的设置。当然,ReportID将与表单中的字段绑定。我也喜欢你的查询与表格隔离的事实;它们可以独立于表格运行。
答案 2 :(得分:2)
docmd.openreport的Where子句是一个字符串,它使用与SQL语句中where子句相同的格式。
将查询参数化放在docmd而不是报告的RecordSource的原因是灵活性。您可能需要在没有任何参数的情况下打开报告/返回所有记录,或者能够在不同的字段上进行过滤。
答案 3 :(得分:1)
为什么每个人都想让这个变得如此复杂,我不知道。
不带参数保存报告的记录源。
,在DoCmd.OpenReport的相应参数中传递标准。
尝试以任何其他方式执行此操作将成为抵制在Access中完成任务的自然方法的问题。
答案 4 :(得分:1)
我知道这是一个很老的帖子,但这让我有点兴奋。错误是“无效使用parren”,但问题是字段名称中的空格。我正在创建一个数据库的报告,有人做了常见的错误,空格。
当数据库字段有空格时,通过where子句将参数传递给查询使用此示例:
DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'"
如果您考虑到这一点,您可以看到这将产生where [Regional Office]='string value'
,正如您在访问sql中所期望的那样。