0

我正在尝试使用 DlookUp 获取值,问题是尽管使用了 Format 函数,但将我的 dd/mm/yyyy 格式访问为 mm/dd/yyyy。

muestraAguasDatos = Nz(DLookup("[name]", "samples", "[location] = '" & location & "' AND ([name] LIKE 
'*ACRT*' OR [nombre] LIKE '*CAWQ*') AND [sample_date] = #" & Format(sampleDate, "dd/mm/yyyy") & "#"))

当日值大于 12 时,此 DLookup 有效,但当它较低时,尽管具有格式,但仍将其格式化为 mm/dd/yyyy

你能帮我解决这个问题吗?

4

1 回答 1

2

对于非美国居民,MS Access 日期字段存在很多误解。

基本规则是:

#the date#每当您使用符号指定硬编码的日期文字时,都可以:

  • SQL 查询
  • 查询过滤条件
  • 在 VBA 中
  • Dlookup()你一样

您应该始终使用美国日期格式:MM/DD/YYYY,或 ISO 格式 YYYY/MM/DD

Access初学者的困惑来自于几件事:

  1. 在界面中,默认情况下,MS Access以计算机的Windows 区域和语言选项设置中定义的格式对日期进行隐式转换。因此,非美国居民可能会有这样的印象,即默认情况下日期总是以 DD/MM/YYYY 格式存储,但那是一个谎言。日期存储为数字,只是显示格式会根据计算机设置进行更改和调整。

  2. 在某些情况下,当您在 VBA 或查询中使用 DD/MM/YYYY 格式对日期文字进行编码时#the date#,它就可以正常工作。原因是日期 MS Office 中有一个检查日期算法,可以验证日期并在某些情况下将其修改为正确的格式:

  • 当您的日期从年份开始时,MS Access 足够智能,可以检测到它,然后它会认为您的日期是在 YYYY-MM-DD 中输入的,并隐式转换为 MM/DD/YYYY。
  • 如果月份部分高于 12 且低于 31,则 MS Access 将理解这实际上是 DAY,并且您在另一个地方硬编码了月份。因此,例如,如果您像这样介绍9 月 15 日#15/09/2019#:它将隐式转换为#09/15/2019#. 但是,如果您像这样进入9 月 11 日#11/09/2019#,那么 Access 会将其处理为11 月 9

个人观点,我一直觉得这最后一个行为很愚蠢,因为它可能会给不熟悉该机制的人的应用程序带来很多麻烦,并且跟踪问题出在哪里可能非常乏味。它是偷偷摸摸的,它不应该在那里。如果格式错误,最好提出错误。

于 2020-09-11T11:56:48.417 回答