访问#Error的查询中的错误处理

时间:2015-07-02 17:03:52

标签: sql ms-access ms-access-2013

我正在使用Access中的考勤表,我有InTimeOutTime。这些字段是日期/时间字段。 有些记录只包含时间11:40:00,有些包含日期以及21-07-2015 11:45:00之类的时间。因此,使用以下代码来获得工作时间。

HrsPresent: Round(DateDiff("n",TimeValue(TimeSerial(Hour([TimeIn]),Minute([TimeIn]),Second([TimeIn]))),TimeValue(TimeSerial(Hour([TimeOut]),Minute([TimeOut]),Second([TimeOut]))))/60,2)

使用上面的代码,在查询中的列中提供了正确的工作小时数,但如果任何字段为空,则我得到结果中的#error

我尝试使用NzIsErrorIsNumeric,但都是徒劳。

  • 这是什么,我做错了?
  • 是否有其他工作方式?

1 个答案:

答案 0 :(得分:1)

在执行计算之前,您基本上只需要确保两个必需字段都不为空。您可以使用两个IIF语句执行此操作。如果一个字段为空,那么您只需指定一个默认值或按您希望的方式处理它。

在我的例子中,默认值是零,我必须警告你,虽然这是自由的,但我并不十分确信我的括号排列正确。另外我很抱歉这一切都在一条线上,我想不出一个合理的方法来分解它。

HrsPresent: IIF(Nz([TimeIn],"") = "", 0, IIF(Nz([TimeOut],"") = "", 0, Round(DateDiff("n",TimeValue(TimeSerial(Hour([TimeIn]),Minute([TimeIn]),Second([TimeIn]))),TimeValue(TimeSerial(Hour([TimeOut]),Minute([TimeOut]),Second([TimeOut]))))/60,2)))

有关IIF语句的详细信息,请访问此处:http://www.techonthenet.com/access/functions/advanced/iif.php