1

我有一个带有 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 格式的转换。它显然在我运行过的所有其他机器上都做得很好。

4

3 回答 3

0

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

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

于 2017-01-04T12:17:17.730 回答
0

你有时间部分吗?这将返回什么:

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

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

NumDate: CDbl([Date])

或者你真的有文字:

WHERE [Date] = '01/01/2017' 
于 2017-01-04T08:53:46.300 回答
0

我现在已经建立了一个新的数据库,所有后端表都添加为新的链接表,它已经解决了这个问题。

我已经检查了尽可能多的设置,并且找不到两个数据库之间的任何差异,所以我只能得出结论,旧的前端数据库已经损坏。以为我最好将此作为答案发布,以防万一其他人遇到同样的问题!

于 2017-01-04T19:54:50.567 回答