【问题标题】:Insert date/time on last modified record in Access 2013在 Access 2013 中的最后修改记录上插入日期/时间
【发布时间】:2016-08-29 01:28:30
【问题描述】:

我建立了一个简单的时钟数据库。该表有四列:

  • ID(自动编号)
  • 员工 ID
  • TimeIn(日期/时间)
  • 超时(日期/时间)。

员工只能看到一个带有两个按钮的表单,即“打卡”和“打卡”。 每个按钮都有一个 On Click 事件,用于将新记录添加到表中,其中 TimeInTimeOut 下的 fOSUserNameNow(),具体取决于单击的按钮。

所有这些都很好,但是,我需要一份报告来显示每天工作的小时数。为了获得具有准确 DateDiff() 的报告,TimeInTimeOut 数据必须位于同一行。我已经尝试过 LastModified、MovePrevious/MoveNext 和 IfNull,如果不手动移动它,我无法在同一行获得 TimeOut。

【问题讨论】:

    标签: ms-access vba ms-access-2013 datediff


    【解决方案1】:

    你可以这样做:

    Select
        EmployeeID,
        Sum(TimeIn) As ClockIn,
        Sum(TimeOut) As ClockOut
    From
        YourClockTable
    Group By
        EmployeeID,
        DateValue(Nz(TimeIn, TimeOut))
    

    【讨论】:

    • 我假设这将在查询中(抱歉,我还不熟悉 SQL)。当我运行报告时,这给了我一个参数框来输入 ID。报告中的 ClockIn 和 ClockOut 文本框应该使用什么格式?
    • 是的,它是 SQL。只需修改以适合您的表名等并将粘贴复制到 SQL 窗格中。当然,您必须调整报告以使用此来源。这些值是日期时间,因此要使用的格式是 h:nn
    • 现在我在运行报表时得到三个输入框(ClockIn、ClockOut 和 ID)并将它们留空会导致错误:“此表达式输入错误,或者它太复杂而无法评估”。为什么我得到输入框?
    • 当您声明不存在的字段名称时,您会得到参数框。您在问题中列出了实际的字段名称,因此 - 如果这些存在 - 将我的 SQL 复制粘贴到新查询中将按原样工作。
    【解决方案2】:

    并不完美,但您可以从以下内容开始:

    update clock 
    set timeOut =  Now()
    where employeeId = fOsUsername()
    and id in (select top 1 id from clock where employeeId = fOsUsername() 
                      and timeOut is null and timeIn > Date()-1
                      order by id desc
              )    
    

    【讨论】:

    • 我试过这个并得到以下编译错误:预期:行号或标签或语句或语句结尾。它似乎是由“id in”触发的。
    • @shadow2451 这是 SQL,不是 VBA。
    • 抱歉,我刚接触 VBA,还没有用 SQL 做太多事情。这会被插入到查询中还是作为表单中的 On Click 过程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多