You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS-Access参数化查询图表:自动传入父报表日期参数问题

解决方案:将父报表起止日期传入Access图表参数化查询

方法1:直接在图表行源中引用父报表控件

现代图表的行源可直接引用父报表的控件值,无需依赖临时表。修改图表行源为参数化查询,直接调用父报表的startDate和endDate控件:

SELECT 
    Format([DateAndTime]," mm/dd hh:nn") AS Expr1,
    Avg([Vaccum]) AS VAC,
    AVG([Pressure]) AS PRESSURE, 
    AVG([Temp]) AS [ACTUAL TEMPERATURE]
FROM [trendData]
WHERE [DateAndTime] Between Reports!父报表名称!startDate And Reports!父报表名称!endDate
GROUP BY Format([DateAndTime]," mm/dd hh:nn")
ORDER BY Format([DateAndTime]," mm/dd hh:nn");

若图表位于子报表内,引用路径需调整为:
Reports!父报表名称!子报表控件名称.Form.startDate

注意:需确保父报表在图表加载时已完全初始化,控件值处于可用状态。

方法2:通过报表事件动态修改图表行源

若直接引用控件存在加载顺序问题,可在父报表的Detail_Format事件中动态更新图表行源,传入起止日期参数:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    Dim chartObj As Object
    Dim sqlStr As String
    Dim startDt As Date, endDt As Date
    
    startDt = Me.startDate.Value
    endDt = Me.endDate.Value
    
    ' 获取图表对象(假设子报表控件名为ChartSubReport,图表控件名为Chart0)
    Set chartObj = Me.ChartSubReport.Report.Chart0
    
    ' 构建带日期过滤的SQL语句
    sqlStr = "SELECT Format([DateAndTime],' mm/dd hh:nn') AS Expr1, " & _
             "Avg([Vaccum]) AS VAC, AVG([Pressure]) AS PRESSURE, AVG([Temp]) AS [ACTUAL TEMPERATURE] " & _
             "FROM [trendData] " & _
             "WHERE [DateAndTime] Between #" & Format(startDt, "yyyy-mm-dd hh:nn:ss") & "# And #" & Format(endDt, "yyyy-mm-dd hh:nn:ss") & "# " & _
             "GROUP BY Format([DateAndTime],' mm/dd hh:nn') " & _
             "ORDER BY Format([DateAndTime],' mm/dd hh:nn');"
    
    ' 更新图表行源并重新查询
    chartObj.RowSource = sqlStr
    chartObj.Requery
End Sub

方法3:优化现有临时表方案

若必须保留临时表逻辑,可在生成临时表时直接过滤日期范围,减少后续查询的处理成本:

修改Report_Load事件中的SQL语句,加入日期过滤参数:

qdf.SQL = "SELECT * INTO [" & tempTableName & "] FROM [trendData] WHERE [DateAndTime] Between ? And ?"
qdf.Parameters(0).Value = startDate
qdf.Parameters(1).Value = endDate

修改后临时表仅包含指定日期范围内的数据,图表行源可继续使用现有查询,无需额外调整。

关键注意事项

  • 日期值在SQL中需用#包裹,且统一使用yyyy-mm-dd hh:nn:ss格式,避免区域格式差异导致的错误。
  • 若使用子报表,需确保LinkMasterFields和LinkChildFields配置正确,或在父报表事件中触发子报表的重新查询。
  • 现代图表的参数化功能需Access 2016及以上版本支持,请确认当前Access版本兼容性。

内容的提问来源于stack exchange,提问作者Dadams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:25:00