我有一个带有 Microsoft Access (2016) 前端的 MySQL 数据库。我在 Access DB 中有许多包含 DateTime 列的链接表。
我已经在我的家用 PC 和笔记本电脑上成功运行了这个数据库很长一段时间,但最近不得不更换我的笔记本电脑,所以刚刚安装在(很好地复制到)一个新笔记本电脑上。在这个新实例上,我的日期过滤器都不起作用。在调查中,我注意到非常奇怪的行为:如果我打开其中一个链接表,单击其中一个日期列中的任何值并选择仅过滤该值的选项,则不会显示任何内容。例如,如果我写一个查询来过滤
WHERE [Date]=#01/01/2017#
什么都没有返回。如果我将其重写为
WHERE CDate([Date])=#01/01/2017#
它返回正确的记录(顺便说一下,我选择了这个日期来证明它不是英国/美国日期格式问题)。
该列在前端的链接表中正确显示为 DateTime 列,如果我编写查询来显示所述列的年、月和日值,它将返回正确的值。
我正在运行完全更新的 Windows 10 Home,两台机器上都装有 Access 2016 MSO 16.0.7571.7063 和 MySQL Connector/ODBC 5.3.6。据我所知,我在 Access 中找不到两台机器之间不同的其他设置,而且我的区域设置和语言设置在两台机器上似乎也相同。
我尝试将 MySQL 列转换为 Date 而不是 DateTime,但没有任何区别。我也刷新了,然后把新笔记本上版本上的表格删了重新链接,甚至修复了Office安装,还是不爽。
顺便说一句,如果我将链接表复制到本地表,它工作正常。
我不知道是什么原因造成的。由于其他一切似乎都相同,我的新笔记本电脑上的某些注册表设置是否可能与我的其他 PC 不同?
编辑:我刚刚在笔记本上尝试了以下条款
WHERE [Date]>=#01/01/2017# And [Date]<=#31/12/2016#
它返回所有记录!
进一步编辑:我也尝试过运行以下查询
Select count([date]) from daysworked where [date]>=#dd/mm/yyyy#
在某些 VBA 中,用于一系列日期。只要 dd 介于 1 和 20(含)之间,它就会返回 1753(所有行)。每当 dd 为 21 或更大时,无论 mm 和 yyyy 的值如何,它都会返回零。在我看来,这可能会将 dd 解释为世纪值。由于 MySQL 日期的格式为 yyyy-mm-dd,我想这可能有某种意义,但我希望 ODBC 连接器能够处理从 Access 到 MySQL 格式的转换。它显然在我运行过的所有其他机器上都做得很好。