如何将筛选器 属性 传递到报表并向该筛选器添加更多条件 (Access)

How To Pass a Filter Property to a Report AND Add More Criteria to that Filter (Access)

我目前运行 Access 2007。我有一个报告管理器,允许用户设置参数。自定义日期并允许选择需要修改的日期字段(timecreated、timemodified、txndate)。报告方面工作完美。

在报告 (totalshipped) 中,用户可以双击报告正文,它将从 "big picture" 摘要转到详细报告 (totalshippeddetailed)。 基本上,为了使其正常工作,totalshipped 的日期和正文中的客户名称(双击)需要在 totalshippeddetailed 报告打开时匹配。这是我尝试过的示例:

Private Sub ftrReport_DblClick(Cancel As Integer)

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter

End Sub

报告成功打开并将过滤器 属性(日期)传递到总发货详细报告中,问题是我还需要引用 [customerref_fullname](客户)我是用这条线做的:

[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

这可以作为对客户的参考,但我需要将 me.filter 属性 与对 customerref_fullname 的参考结合起来,尝试时出现错误:

Private Sub ftrReport_DblClick(Cancel As Integer)

  DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _
  [reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

End Sub

我试过的另一种方法有效,但不允许除 [txndate] 以外的任何内容过滤报告的详细版本:

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", _
"[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] and [txndate] >= [forms]![frmrptdatemanager]![txtstartdate] And [txndate] <= [forms]![frmrptdatemanager]![txtenddate]  "

最后我采用上面的代码并尝试在会给出错误的表单中引用日期字段本身:

 DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", _
"[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] and [forms]![frmrptdatemanager]![cboDateField] >= [forms]![frmrptdatemanager]![txtstartdate] And [forms]![frmrptdatemanager]![cboDateField] <= [forms]![frmrptdatemanager]![txtenddate]  "

我尝试了更多示例,但其中 none 可以实现我的目标:允许用户双击报告正文以查看具有相同日期范围的客户的详细报告作为主要报告。

请帮忙!!!!

请记住,过滤器参数就像一个 WHERE 子句,前面没有 WHERE 关键字。

你在这里做什么:

  DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _
  [reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

您正在使用现有过滤条件并添加到其中,但您没有在 link 当前过滤条件和下一个条件中包含 AND 关键字。

您需要做:

  DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _
  " AND [reports]![TotalShipped]![customerref_fullname] = '" & [customerref_fullname] & "'"

另请注意,您必须将变量或控件名称连接到过滤器字符串中,以获取变量或控件的值,而不是变量或控件的名称。当该值是字符串或日期时,还必须使用正确的标点符号对其进行偏移:字符串值的单引号和日期的散列 tag/pound 符号。

为了帮助开发和调试此类内容,我建议使用字符串变量来构建整个筛选条件。在将字符串变量用作 OpenReport 方法中的筛选参数之前检查字符串变量的内容或将值转储到立即数 window (Debug.Print) 将帮助您捕获缺失的 AND、缺失的空格和缺失筛选条件中的标点符号。

您的 DblClick 方法将如下所示:

Private Sub ftrReport_DblClick(Cancel As Integer)
  Dim FilterCondition as String

  FilterCondition = me.filter
  FilterCondition = FilterCondition & " AND [txndate] >= #" & [forms]![frmrptdatemanager]![txtstartdate] & "# AND [txndate] <= #" & [forms]![frmrptdatemanager]![txtenddate] & "#"

  Debug.Print FilterCondition

  DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", FilterCondition

End Sub