尽管相同的代码以另一种形式工作,但 DLookup 返回 null?

DLookup returning null despite same code working in another form?

我正在使用下面的代码从记录中查找最近的值,因此此实例获得 [Process No],其中 [Time] 字段等于我的 DMax 值。由于某些奇怪的原因,它突然停止工作,现在只有 return 为 null。

同样的代码在上周工作,但由于在周末(由其他人)输入了一个条目,所以所有类似的 DLookup 语句只有 return 个空值。相同的代码在我的其他表单中仍然有效,我已经删除了我认为是不可靠的记录但没有运气。

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

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

*DMaxTime 和 lastProcNoLookup 都是变体

当您为 DLookup Criteria 选项添加 Date/Time 值时,将该值的日期部分格式化为 yyyy- m-d.

'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 格式为数据库引擎提供日期字符串时,如果该字符串不代表 [=26] 中的有效日期,Access 可以正确解释它=]mm/dd/yyyy格式。

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

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# 将被解释为 Mar 2 而不是 Feb 3, 2015 :

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 格式提供数据库引擎日期来避免此类混淆。