Microsoft Access VBA 将参数传递给报表
Posted
技术标签:
【中文标题】Microsoft Access VBA 将参数传递给报表【英文标题】:Microsoft Access VBA Passing Parameters to a Report 【发布时间】:2016-01-20 15:07:42 【问题描述】:我有表单frmScreen
,它有3 个字段File_Number, id, country
。数据取自Screen
表作为数据源。report
具有相同的数据源
我在表单上有一个调用报告 rptScreen 的按钮。我想将文件名作为参数传递给报告,以便报告只显示
Select * from Screen where File_Number=<parameter passed through the form?
我在 *** 上查看过以前的帖子,但没有帮助。
那么我如何传递参数以及我应该在报告中进行哪些更改,以便它将File_Number
字段作为参数并仅显示与查询匹配的记录
我的代码如下所示
stLinkCriteria = "[File Number]=" & "'" & Me![File Number] & "'"
DoCmd.OpenReport "rptScreen", acViewPreview, , stLinkCriteria
错误:报告仅显示 file number
的所有数据而不是记录
【问题讨论】:
为什么file
和name
之间有空格?你有没有碰巧看到this answer?它可能会有所帮助。
@MarkC。这就是其他人设计字段名称的方式,不幸的是我无法更改字段名称。
当您输入 Me.
时,intellisense 会为您提供哪些字段名称选项?我非常怀疑它是file name
如果您在 Access 查询设计器中将此作为新查询进行测试,它是否会返回您希望报表显示的行? SELECT * FROM [Screen] WHERE File_Number=Forms!frmScreen!File_Number
你说这个查询在查询设计器中工作:Select * from Screen where File_Number='12'
这强烈表明表字段的名称是File_Number
,而不是File Number
...所以你的stLinkCriteria
应该使用@ 987654339@ 而不是紧跟在stLinkCriteria =
之后的"[File Number]"
【参考方案1】:
更改报告的Row Source
以返回所有行...
SELECT * FROM [Screen]
然后您可以使用DoCmd.OpenReport
打开报告并使用其WhereCondition 选项根据需要过滤报告的数据...
stLinkCriteria = "[File_Number]='" & Me![File Number].Value & "'"
Debug.Print stLinkCriteria '<- check this in Immediate window; Ctrl+g will take you there
DoCmd.OpenReport "rptScreen", acViewPreview, , stLinkCriteria
注意事项:
Screen
是 Access reserved word。虽然它在这里可能不会造成麻烦,但为了安全起见,我在 SELECT
语句中将该名称括起来。但如果可能的话,最好给该表起一个不同的名称。
我认为Screen.File_Number
是一个有效字段,Me![File Number]
指的是表单上的一个控件。但由于早先在这些名称中围绕空格与下划线的混淆,这种假设似乎不可靠。
如果您直接打开报表(例如从导航窗格中)而不是使用DoCmd.OpenReport
和 WhereCondition,它将包括表中的所有行。这可能不是你真正想要的,但现在让我们试着让一些基本的工作。
【讨论】:
以上是关于Microsoft Access VBA 将参数传递给报表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Microsoft Access 的不同上下文中使用 VBA 中的参数?
从 DoCmd.OpenReport 将参数传递给 Access 2010 报告
VBA(?):将 Microsoft Access 数据库记录到数据集(列出表/字段/带字段的查询)