【问题标题】:Access 2010 - Report asks to enter parameter valueAccess 2010 - 报告要求输入参数值
【发布时间】:2014-02-24 21:11:46
【问题描述】:

我有一份带有子报告的报告。报告未绑定(它用作信函的模板,仅包含纯文本)。子报表中的值基于位于表单中的两个组合框的值。

所以逻辑如下 - 加载表单 (frmForReport) 时,用户在组合框中选择用于过滤数据库的值(cboSelectCompany 和 cboSelectPU),然后单击“确定”按钮打开我的报告及其子报告。子报表从查询中填充,其中两个字段将这些组合框作为条件。一切正常(我在组合框中选择我需要的内容,报表在报表视图中打开,子报表显示所有过滤的记录,没有任何警告或请求),直到我想切换到 打印预览创建 PDF。每次这样做时,我都会看到弹出窗口输入参数值,其中引用了子报告中使用的标准之一。当我关闭此窗口时,我可以继续进行,将其另存为 pdf 或切换到报告视图,但子报告显示为空白,文字消失。

这适用于 Access 2010。下面是用作子报表记录源的查询:

SELECT qryForLetter.CrossingID, qryForLetter.DispID, qryForLetter.AgreType, qryForLetter.Legal
FROM qryForLetter
WHERE (((qryForLetter.Company)=[Forms]![frmForReport]![cboSelectCompany]) AND ((qryForLetter.PU)=[Forms]![frmForReport]![cboSelectPU]));

我错过了什么?如何摆脱这个弹出窗口?非常感谢任何帮助。

【问题讨论】:

  • 如果您在设计视图中打开该查询,然后使用您的组合框添加两列,会发生什么情况?即“Expr1:[Forms]![frmForReport]![cboSelectCompany]”和“Expr2:[Forms]![frmForReport]![cboSelectPU]”?当您运行该查询时,您在组合框中选择的值是否显示在查询的这两列中?如果没有,您需要更改组合框的“绑定列”属性。
  • 当我按照您的建议在该查询的设计视图中添加两列并运行查询时,我会弹出窗口要求首先为 Forms!frmForReport!cboSelectCompany 输入参数值,然后为 Forms!frmForReport! cboSelectPU。如果我在两个窗口中输入参数,查询将在数据表视图中打开,所有列加上 Expr1 和 Expr2,数据根据我输入的参数过滤。那么这是什么意思呢?
  • 我的错,我应该说删除选择条件行。但是,您在两个新列中有什么值?如果不是组合框中的值,则需要更改“绑定列”设置。
  • 好吧,当我删除选择标准时,我所描述的就会发生。如果我将选择标准留在原处并添加表达式,我只会得到一条记录。但是在这两种情况下,运行查询后,2 个新列都填充了我在弹出窗口中输入的值。对不起,如果我误解了。包含组合框的表单可以正常工作。报告打开也很好。子报表包含在组合框中选择的记录。当我想切换报告视图或将其保存为 pdf 时,我的问题就开始了。
  • 如果运行以下 SQL 会发生什么?我删除了您的选择标准。如果仍然提示您输入任何参数,则表示“qryForLetter”正在询问参数。仍然想知道 Expr1 和 Expr2 是否显示您的组合框中的内容(您的表单需要打开,并进行选择):SELECT qryForLetter.CrossingID, qryForLetter.DispID, qryForLetter.AgreType, qryForLetter.Legal, [Forms]![frmForReport ]![cboSelectCompany] as Expr1, [Forms]![frmForReport]![cboSelectPU as Expr2 FROM qryForLetter

标签: ms-access ms-access-2010


【解决方案1】:

您可以尝试将参数[Forms]![frmForReport]![cboSelectCompany])[Forms]![frmForReport]![cboSelectPU] 替换为函数。

在模块头部创建全局变量:

Public Company As ...
Public PU As ...

...用正确的数据类型替换省略号...

在您的组合框的更新后事件中,将与组合关联的值分配给适当的全局变量,例如:

Company = cboSelectCompany

PU = cboSelectPU

并创建函数(再次将省略号 ... 替换为正确的数据类型):

Public Function fnCompany() As ...
    fnCompany = Company
End Function

Public Function fnPU() As ...
    fnPU= PU
End Function

然后将数据源改为:

SELECT qryForLetter.CrossingID, qryForLetter.DispID, qryForLetter.AgreType, qryForLetter.Legal
FROM qryForLetter
WHERE (((qryForLetter.Company)=fnCompany()) AND ((qryForLetter.PU)=fnPU()));

这具有消除表单字段对报告的依赖的效果,这似乎是问题所在。

【讨论】:

  • 您还可以尝试动态生成数据源查询以对参数进行硬编码。如果此答案不起作用并且您不知道该怎么做,我可以使用该方法创建答案。
  • 这太棒了!非常感谢!奇迹般有效!我完全不知道这个选项,感谢您提供非常有用的提示。
  • 警告:不要指望在通过 VBA 窗口(菜单运行/重置)重置代码后这会起作用 - 这会停止所有代码并重置所有全局变量。您必须在重置代码后重新选择组合项才能使其正常工作。
  • 谢谢蒙蒂,我会记住的。不过老实说我不知道​​为什么我需要重置代码?
  • 有时错误会使代码处于不稳定状态,需要重置,或者您可能只想在调试时停止代码,因此需要重置。根据我的经验,除非得到指示,否则用户不会这样做。我只是为了完整起见而提到它,以防您重置代码并且事情似乎失败了。
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
相关资源
最近更新 更多