vba访问Dlookup,日期为dd / mm / yyyy格式

问题描述

我正在尝试使用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

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

解决方法

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

基本规则是:

每当您使用#the date#表示法指定硬编码日期文字时, 要么:

  • SQL查询
  • 查询过滤条件
  • 在VBA中
  • 像您一样Dlookup()中的人

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

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

  1. 在界面中,默认情况下,MS Access以计算机Windows Regional and Language Options setting上定义的格式对日期进行隐式转换。因此,非美国居民可能会觉得默认情况下,日期始终始终以DD / MM / YYYY格式存储,但那可真是谎言。日期存储为数字,只是显示格式会更改,并会根据计算机设置进行调整。

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

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

个人观点,我总是发现最后一种行为是愚蠢的,因为它可能给不熟悉该机制的人们的应用带来很多麻烦,并且跟踪问题的根源可能非常繁琐。它是偷偷摸摸的,不应该在那里。如果格式错误,抛出错误会更好。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...