运行访问报告,包括另一个具有相同日期范围的非关联附加报告
Posted
技术标签:
【中文标题】运行访问报告,包括另一个具有相同日期范围的非关联附加报告【英文标题】:Run access report including another non-associated attached report with same date range 【发布时间】:2019-10-31 19:14:18 【问题描述】:三个 Access 报告使用两个传递查询和一个标准 SELECT 查询,并且全部单独工作。一个主报告以一个命令按钮开始,该按钮从表单中获取一个日期范围内的两个日期。每次使用后,我可以在 ptq 中看到这些日期参数的变化。其中一个附加报告基于另一个 ptq 运行,使用为日期范围提供的“默认”日期(没有什么可以重置 ptq 的这些日期,因为从主报告中调用附加报告 - 这是我的问题或断开连接我相信),另一个在标准选择查询中使用 WHERE 子句调用表单中的日期。这两个报告向主报告提供了额外但不同的数据。我不相信它们会是带有链接的主字段和子字段的子报表,因为主报表数据和附加的报表数据没有关联。问题是日期范围没有传递给附加报告的一个 ptq,因此日期永远不会改变,只会返回其 ptq 中的“默认”日期范围。这是两个ptq:
exec dbo.uspJobsCompletedThruPress '2019-10-07 05:30:00','2019-10-12 14:29:59'
exec dbo.uspJobsCompletedThruPress_SubReport '2019-10-14 05:30:00','2019-10-19 14:29:59'
子报表 sp 按预期返回一条记录。
我已经尝试像其他附加报告一样使用 SELECT 查询,但这不起作用,因为 sp 的标量不返回日期,它只需要日期参数来构建标量记录。
如何获取日期参数以从主调用报告传递到附加报告的 ptq?
另一个问题是,这些附加报表位于报表页脚部分,因此它们的数据将立即打印在主报表的记录列表之后。但是,由于我使用的是两列,因此即使在末尾有足够的空间时,所附报告的数据也总是打印在下一页而不是第一列(通常)或第二列(给定足够的记录)的底部列出的记录。我怎样才能使附加的报告直接跟随第一个列表?这应该是另一个问题吗?
【问题讨论】:
【参考方案1】:好吧,您始终可以在启动报告之前设置 PT 查询。
所以你可以使用这样的代码:
Sub Mytestzz()
Dim strDtStart As String
Dim strDtEnd As String
strDtStart = qudateT("some date source for start date")
strDtEnd = qudateT("some date source for end date")
With CurrentDb.QueryDefs("qryJobsPressPass")
.SQL = "exec dbo.uspJobsCompletedThruPress " & strDtStart & "," & strDtEnd
End With
With CurrentDb.QueryDefs("qryJobsPressPassSub")
.SQL = "exec dbo.uspJobsCompletedThruPress_SubReport " & strDtStart & "," & strDtEnd
End With
' now launch your report.
End Sub
所以,一旦您运行了上述内容,那么使用的两个 PT 查询现在都已设置好,可以开始使用了。如果您基于上述两个查询启动报告,那么他们将尊重您拥有的标准。请记住,您可以在打开的报告中添加额外的“where”子句,但客户端仍会根据上述 PT 查询提取您拥有的任何数据(视图实际上更好 - 因为您不必打扰 PT查询,然后简单地将所有条件发送到打开报告命令,并且访问只会根据传递的条件拉下管道记录。这意味着您以前为报告提供过滤器的现有 VBA 代码将像以前一样工作。你通过使用视图而不是 PT 查询(特别是如果您为 openreport 命令提供附加条件时),往往会获得同样好的性能(如果不是更好的话)。
另外,因为经常会为 sql server 和 PT 查询格式化日期,所以我有一个例程来为我格式化日期。在上面,我使用了 qudateSQLt(包括时间)。所以使用的方便的花花公子函数看起来像这样:
Public Function qudateSQLt(myDate As Variant) As String
' returns a formatted string of date, surrounded with # signs
' format is mm/dd/yyyy as required for sql, regardless of date setting
If IsNull(myDate) = True Then
qudateSQLt = ""
Else
' use ISO date format
qudateSQLt = "'" & Format(myDate, "yyyy-mm-dd HH:NN:SS") & "'"
End If
End Function
【讨论】:
以上是关于运行访问报告,包括另一个具有相同日期范围的非关联附加报告的主要内容,如果未能解决你的问题,请参考以下文章
C ++ - 指向具有相同地址但不同值的不同对象的另一个非静态成员的非静态void *成员