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

时间:2017-11-30 19:45:26

标签: ms-access access-vba ms-access-2007

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

在报告(总计)中,用户可以双击报告的正文,然后从“大图”"摘要详细报告(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]  "

我已尝试过更多示例,但没有一个可以实现我的目标:允许用户双击报告正文以查看客户的详细报告,其日期范围与主报告相同。

请帮助!!!!

1 个答案:

答案 0 :(得分:1)

请记住,filter参数类似于WHERE子句,前面没有WHERE关键字。

你在这做什么:

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

您已采用现有的过滤条件并添加到该条件,但您没有包含AND关键字来链接当前过滤条件和下一个条件。

您需要这样做:

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

另外请注意,您必须将变量或控件名称连接到过滤器字符串中以获取变量或控件的值,而不是变量或控件的名称。当字符串或日期为字符串或日期时,还必须使用正确的标点符号来抵消该值:字符串值的单引号和日期的哈希标记/磅符号。

为了帮助开发和调试这样的东西,我建议使用字符串变量来构建整个过滤条件。在将其用作OpenReport方法中的filter参数之前,检查字符串变量的内容或将值转储到即时窗口(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