我有一个带有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格式的转换。显然,在我运行过的所有其他机器上,它的性能都很好。
现在,我建立了一个新的数据库,将所有后端表添加为新的链接表,它已经解决了该问题。
我已经检查了尽可能多的设置,并且找不到两个DB之间的任何区别,所以我只能得出结论,旧的前端DB已损坏。以为我最好将其发布为答案,以防万一其他人遇到同样的问题!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句