Vba 以编程方式将参数传递到access报告中
我有一个现有的访问MDB。我正在向运行现有报表的现有窗体添加一个命令按钮。所做的更改是,此按钮需要传入一个参数,该参数包含报告的记录的ID—当前报告在MDB中的每个记录上运行 我已经修改了报表运行的查询,以使用ID值的参数,因此,现在当单击按钮时,Access会提示输入要报告的记录ID,并且报表会按其应有的方式显示Vba 以编程方式将参数传递到access报告中,vba,ms-access,Vba,Ms Access,我有一个现有的访问MDB。我正在向运行现有报表的现有窗体添加一个命令按钮。所做的更改是,此按钮需要传入一个参数,该参数包含报告的记录的ID—当前报告在MDB中的每个记录上运行 我已经修改了报表运行的查询,以使用ID值的参数,因此,现在当单击按钮时,Access会提示输入要报告的记录ID,并且报表会按其应有的方式显示 但是,我一辈子都不知道如何将参数传递到报表中供查询使用。如何执行此操作?DoCmd.OpenReport方法有各种参数,其中一个是Where语句: DoCmd.OpenReport"
但是,我一辈子都不知道如何将参数传递到报表中供查询使用。如何执行此操作?DoCmd.OpenReport方法有各种参数,其中一个是Where语句:
DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID
就是
expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
我处理这类问题的一般方法是将条件保存在数据库中,通常是一个只有一行的控制表。然后,为了引用您的条件,您在paranthesis中放置了一个查询,该查询返回您想要的条件的一个值。在您的情况下,它将类似于:
(select reportID from control)
这种技术的优点是,控制表会记住下次运行报告时的设置。当然,ReportID将绑定到表单中的字段。我还喜欢这样一个事实,即您的查询与表单隔离;它们可以独立于表单运行 我不知道为什么每个人都想把事情弄得这么复杂
试图以任何其他方式实现这一点都将是抵制在Access中完成任务的自然方法的问题。docmd.openreport的Where子句是一个字符串,它使用的格式与SQL语句中的Where子句相同
将参数化查询放在docmd而不是报表的RecordSource的原因是灵活性。您可能需要在没有任何参数的情况下打开报告/返回所有记录,或者能够在不同字段上进行筛选 我知道这是一篇老文章,但这篇文章花了我一点时间。错误为“无效使用parren”,但问题是字段名中的空格。我正在从一个数据库创建一个报告,有人犯了一个常见的错误,空格 要在数据库字段有空格时通过where子句将参数传递给查询,请使用以下示例:
DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'"
如果您仔细想想,您会发现这将产生
where[Regional Office]='string value'
,正如您在access sql中所期望的那样。我认为这是最干净的方法。啊哈!这就是我要找的!谢谢,Remou。我使用的是Access 2003,“WhereCondition”属性实际上是第四个参数,因此在上面的示例中,您只需要两个逗号,即:DoCmd.OpenReport“rptrept”、acViewPreview、、“ID=”&Me.ID。这个答案应该得到改进,以减少对“FilterName”参数的排除不明确。i、 e.由于大多数报告都有一个现有的或嵌入的查询,“记录源”和“WhereCondition”是需要传递给报告的全部内容。OpenArgs参数在用于打开报表时也过于苛刻,因为它需要更多的努力才能实现,并且更常用于DoCmd.OpenForm。您需要进行大量不必要的连接。您真正需要的是:“[Regional Office]=”&cmboOffices.Value&“”。如果[地区办事处]可以包含“'”字符,请小心。在Access中,字符串使用双引号是很正常的,因此:“[Regional Office]=”&Chr(34)&cmboOffices.Value&Chr(34)此外,在对象名称中添加空格(以及非字母数字字符)只是您应该停止的操作。因为您可以,很多人都这样做,但这是因为他们没有注意到字段名及其标题可以单独设置,因此字段RegionalOffice的标题属性可以是“RegionalOffice”。这意味着,当您将其放在表单或报表上时,它将自动具有人性化的标题(带空格),而字段名是SQL友好的(即不需要括号)。