DateTime 列在链接到 MySQL 后端的 MS Access 表中不起作用

DateTime column not working in MS Access tables linked to MySQL backend

我有一个带有 Microsoft Access (2016) 前端的 MySQL 数据库。我在 Access DB 中有许多链接的 tables,其中包含 DateTime 列。

我已经 运行在我的家用 PC 和笔记本电脑上成功地使用这个数据库很长一段时间了,但最近不得不更换我的笔记本电脑,所以刚刚安装(很好地复制到)一个新笔记本电脑上.在这个新实例上,我的 none 个日期过滤器正在运行。在调查中,我注意到非常奇怪的行为:如果我打开链接的 table 之一,单击其中一个日期列中的任何值,然后 select 选项仅过滤该值,什么都没有被展示。如果我写一个查询来过滤例如

WHERE [Date]=#01/01/2017# 

没有返回任何内容。如果我将其重写为

WHERE CDate([Date])=#01/01/2017# 

它 returns 正确的记录(顺便说一句,我选择这个日期是为了证明它不是 UK/US 日期格式问题)。

该列在前端的链接 table 中正确显示为 DateTime 列,如果我编写查询来显示所述列的年、月和日值,它 returns 正确的值。

我是 运行ning Windows 10 Home,完全更新,在两台机器上都有 Access 2016 MSO 16.0.7571.7063 和 MySQL Connector/ODBC 5.3.6。我在 Access 中找不到其他两台机器不同的设置,据我所知,我的语言环境和语言设置在两台机器上似乎也相同。

我尝试将 MySQL 列转换为日期而不是日期时间,但没有任何区别。我也刷新了,然后删除了,重新链接了新笔记本版本上的table,甚至修复了Office安装,仍然没有快乐。

顺便说一句,如果我将链接 table 复制到本地 table,它工作正常。

我不知道是什么原因造成的。由于其他一切似乎都一样,是否有可能我的新笔记本电脑上的某些注册表设置与我的其他 PC 不同?

编辑:我刚刚在笔记本上尝试了以下条款

WHERE [Date]>=#01/01/2017# And [Date]<=#31/12/2016#

它returns全部记录!

进一步编辑:我也尝试了 运行 宁以下查询

Select count([date]) from daysworked where [date]>=#dd/mm/yyyy#

在某些 VBA 中,日期范围。每当 dd 介于 1 和 20(含)之间时,它 returns 1753(所有行)。只要 dd 等于或大于 21,它 returns 为零,无论 mm 和 yyyy 的值如何。在我看来,这可能会将 dd 解释为世纪值。由于 MySQL 日期的格式为 yyyy-mm-dd,我想这可能有某种意义,但我希望 ODBC 连接器能够处理从 Access 到 MySQL 格式的转换。它显然在我拥有 运行 的所有其他机器上都很好。

你有时间部分吗?这会是什么 return:

WHERE [Date] Between #01/01/2017# And #01/02/2017# 

或尝试在两台机器上显示数值并比较:

NumDate: CDbl([Date])

或者你真的有文字:

WHERE [Date] = '01/01/2017' 

我在笔记本上创建了新的数据库,并使用相同的 ODBC DSN 添加了链接 table,并且工作正常。所以它一定与我正在使用的特定 accdb 文件有关。我找不到任何可以做到这一点的数据库设置,所以我开始怀疑腐败。

至少这给了我一个构建新的 Access accdb 并将我的所有对象移入其中的修复,尽管是一个痛苦的修复。但我很想知道为什么这种情况只发生在我的笔记本上,而不发生在任何其他 PC 上 运行 相同的 accdb 文件和相同的 ODBC 连接器。

我现在已经建了一个新的DB,把所有的后端表都添加为新的链接表,问题就解决了。

我已经尽可能多地检查了设置,但找不到两个数据库之间的任何差异,所以我只能断定旧的前端数据库已损坏。我想我最好 post 这作为一个答案,以防万一其他人遇到同样的问题!