【问题标题】:Calculate the length of a Date/Time interval in days, hours, and minutes以天、小时和分钟计算日期/时间间隔的长度
【发布时间】:2014-08-19 23:47:31
【问题描述】:

我创建了一个包含开始日期/时间和结束日期/时间的表。现在我正在尝试创建一个查询,该查询将以天、小时和分钟为单位计算开始日期和结束日期之间的差异。我正在使用 Access 2013。我想在表格中执行此操作,因为最后,我需要将天数、小时数和分钟数存储在永久记录中。但是,我知道在表格中进行计算并不是好的编程。任何帮助将不胜感激。

【问题讨论】:

  • 你用的是什么数据库引擎?
  • 我认为,问题是 what 你打算如何处理时差。计算它的问题是您必须编写一个触发器,以防记录被更新并且需要重新计算。我不知道 Access 是否这样做,可能会这样做。在这种情况下,您可以抛开理论并拥有多余的专栏。关键是日期算术在时间上可能很昂贵,因此如果您需要大量差异,请预先计算它。但如果没有必要,何必呢? (您可能还希望在表格前面有一个VIEW,仅在视图中添加计算字段。

标签: datetime ms-access-2013


【解决方案1】:

要“在表格中”进行计算,您可以使用更改前数据宏。对于带有

的表
  • 名为 [Started] 和 [Ended] 的日期/时间字段用于保存开始/结束值,以及
  • 名为 [DurationDays]、[DurationHours] 和 [DurationMinutes] 的长整型字段用于保存计算值,

以下宏可能会解决问题:

有关数据宏的更多信息,请参阅

Create a data macro

【讨论】:

  • 我可以给这个加一点点吗。在我的表单上,我有一个名为 Start Date 的控件和一个名为 End Date 的控件。我添加了 3 个控件天、小时、分钟。在结束日期控件退出时,我如何使用您向我展示的内容来填充天数、小时和分钟控件?
  • 如果您的 Days、Hours 和 Minutes 控件绑定到表中的相应字段,则这些值将由 Data Macro 计算并显示在控件中,但仅在您提交(保存)时对记录的更改。如果您希望计算值显示在控件中在保存更改之前(而表单仍然“脏”),那么您需要添加 VBA 代码来执行相同的计算并分配值到控件的.Value 属性,并从表单中适当的事件处理程序调用它(可能是“结束日期”的On Lost Focus 事件)。
  • 这是我正在使用的代码。这一天工作得很好。小时和分钟返回 0。有什么想法吗?
  • Me.UnboundDays.Value = Int(Abs(Me.End_Date - Me.Start_Date)) dayFraction = (Abs(Me.End_Date - Me.Start_Date) - Int(Abs(Me.End_Date - Me .Start_Date))) durHours = (Int(dayFraction * 24)) Me.UnBoundHours.Value = (durHours) Me.UnBoundMinutes.Value = (Round(dayFraction * 1440 - durHours * 60, 0))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多