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

MS Access中如何按选定时间段筛选并统计对应机器的故障天数

实现步骤

以下是适合Access新手的分步操作,无需复杂基础即可完成:

1. 提前确认表结构(避免后续计算错误)

你需要确保两张表的字段类型符合要求:

  • 故障记录表(建议命名为tbl_Downtime):
    • Machine字段为数字型,关联机器表的主键ID
    • Start date、End date字段为日期/时间型,不要用文本类型存储
  • 机器表(建议命名为tbl_Machine):
    • 主键为ID(数字型,和故障表的Machine字段对应),可加MachineName字段存储机器名称,方便下拉选择

2. 核心:编写重叠天数计算查询

故障记录可能跨你选择的查询时间段,不能直接累加Number of days字段,需要先计算单条故障和查询时间段的重叠天数,再汇总,查询SQL如下:

SELECT Sum(DateDiff("d", IIf([Start date]>[Forms]![frm_CalculateDowntime]![txt_StartDate],[Start date],[Forms]![frm_CalculateDowntime]![txt_StartDate]), IIf([End date]<[Forms]![frm_CalculateDowntime]![txt_EndDate],[End date],[Forms]![frm_CalculateDowntime]![txt_EndDate]))+1) AS TotalDowntime
FROM tbl_Downtime
WHERE 
  [Machine] = [Forms]![frm_CalculateDowntime]![cbo_Machine]
  AND [Start date] <= [Forms]![frm_CalculateDowntime]![txt_EndDate]
  AND [End date] >= [Forms]![frm_CalculateDowntime]![txt_StartDate];

将该查询保存为qry_CalculateTotalDowntime即可。

3. 创建交互窗体(无需手动输入参数)

3.1 添加窗体控件

新建空白窗体,命名为frm_CalculateDowntime,添加以下控件:

  • 组合框(名称:cbo_Machine):行源绑定tbl_Machine,设置「列数」为2,「绑定列」为1,「列宽」设为0cm;10cm,即可实现显示机器名称、实际取值为机器ID的效果
  • 两个文本框(名称分别为txt_StartDate、txt_EndDate):格式设置为「短日期」,Access会自动弹出日期选择器
  • 命令按钮(名称:btn_Calculate,标题:计算总停机天数)
  • 文本框(名称:txt_Result,设置「是否锁定」为是,用来显示最终结果)

3.2 添加按钮点击VBA代码

右键点击命令按钮,选择「事件生成器-代码生成器」,粘贴以下代码即可:

Private Sub btn_Calculate_Click()
    ' 先校验必填项是否为空
    If IsNull(Me.cbo_Machine) Or IsNull(Me.txt_StartDate) Or IsNull(Me.txt_EndDate) Then
        MsgBox "请先选择机器、填写完整的查询起止日期"
        Exit Sub
    End If
    If Me.txt_StartDate > Me.txt_EndDate Then
        MsgBox "开始日期不能晚于结束日期"
        Exit Sub
    End If
    
    ' 执行查询获取结果
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("qry_CalculateTotalDowntime")
    
    ' 无故障记录返回0,否则返回计算结果
    If IsNull(rs!TotalDowntime) Then
        Me.txt_Result = 0
    Else
        Me.txt_Result = rs!TotalDowntime
    End If
    
    rs.Close
    Set rs = Nothing
End Sub

4. 测试验证

打开窗体,选择对应机器、输入你给出的示例时间段:

  • 选ID为3的机器、时间段2020-01-01到2020-12-31,返回结果应为19天
  • 选ID为2的机器、时间段2020-11-01到2020-11-30,返回结果应为6天

注意事项

  • 如果你的故障记录不存在跨查询时间段的情况,也可以直接累加Number of days字段,把查询里的Sum部分替换为Sum([Number of days])即可
  • 可以给故障表加数据验证规则,确保End date >= Start date,避免计算出负数天数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:02