尽管相同的代码工作在另一种形式,D​​Lookup返回null?

时间:2015-02-03 11:01:16

标签: ms-access access-vba

我使用下面的代码查找记录中的最新值,因此此实例获取[处理否],其中[时间]字段等于我的DMax值。由于一些奇怪的原因,它突然停止工作,现在只返回null。

这个代码在上周工作,但由于周末(由其他人)输入,所有类似的DLookup语句只返回空值。相同的代码仍然以我的其他形式工作,我已经删除了我虽然是狡猾的记录,但没有运气。

DMaxTime = DMax("[Time]", "Daily Oven/Product Record")

'Find last Process No entered
lastProcNoLookup = DLookup("[Process No]", "Daily Oven/Product Record", "[Time] = #" & DMaxTime & "#")

* DMaxTime和lastProcNoLookup都是变体

1 个答案:

答案 0 :(得分:0)

当您为DLookup 条件选项添加日期/时间值时,请将该值的日期部分格式设置为 yyyy-md

'Find last Process No entered
Dim strCriteria As String
strCriteria = "[Time] = " & Format(DMaxTime, "\#yyyy-m-d hh:nn:ss\#")
Debug.Print strCriteria
lastProcNoLookup = DLookup("[Process No]", "Daily Oven/Product Record", strCriteria)

说明:

当您为数据库引擎提供 dd / mm / yyyy 格式的日期字符串时,如果字符串不代表 mm / dd / yyyy中的有效日期,Access可以正确解释它格式。

例如,由于没有第25个月,数据库引擎知道#25-1-2015#必须表示 2015年1月1日。因此,此查询按您的意图解释该值。

SELECT Year(#25-1-2015#) AS [Year], Format(#25-1-2015#, 'mmm d, yyyy') AS Formatted_date

Year Formatted_date
---- --------------
2015 Jan 25, 2015

#3-2-2015#将被解释为 3月2日而不是 2015年2月3日

SELECT Year(#3-2-2015#) AS [Year], Format(#3-2-2015#, 'mmm d, yyyy') AS Formatted_date

Year Formatted_date
---- --------------
2015 Mar 2, 2015

您可以通过始终以 yyyy-m-d 格式提供数据库引擎日期来避免此类混淆。