我有一个带有Microsoft Access(2016)前端的MySQL数据库。我在Access DB中有许多链接表,其中包含DateTime列。
我已经在我的家用电脑和笔记本上成功运行了这个数据库很长一段时间了,但最近不得不更换我的笔记本电脑,因此刚安装(很好地复制到)新笔记本电脑上。在这个新实例中,我的日期过滤器都没有工作。在调查中,我注意到非常奇怪的行为:如果我打开其中一个链接表,单击其中一个日期列中的任何值,并选择仅过滤该值的选项,不显示任何内容。如果我写一个查询来过滤例如
WHERE [Date]=#01/01/2017#
什么都没有。如果我把它重写为
WHERE CDate([Date])=#01/01/2017#
它会返回正确的记录(顺便说一句,我选择此日期来证明它不是英国/美国的日期格式问题)。
该列正确显示为前端链接表中的DateTime列,如果我编写查询以显示所述列的年,月和日值,则返回正确的值。
我在两台计算机上运行Windows 2016 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格式的转换。它显然在我运行的所有其他机器上都很好。
答案 0 :(得分:0)
你有时间部分吗?这会带来什么:
WHERE [Date] Between #01/01/2017# And #01/02/2017#
或尝试在两台机器上显示数值并进行比较:
NumDate: CDbl([Date])
或者你真的有文字:
WHERE [Date] = '01/01/2017'
答案 1 :(得分:0)
我在笔记本上创建了新的数据库,并使用相同的ODBC DSN在那里添加了链接表,并且它可以正常工作。所以它必须与我正在使用的特定accdb文件有关。我找不到任何可以做到的数据库设置,所以我开始怀疑腐败。
至少这给了我一个修复,虽然是一个痛苦的,建立一个新的Access accdb并将我的所有对象移动到它。但我很想知道为什么这只发生在我的笔记本上,而不是在运行相同accdb文件和相同ODBC连接器的任何其他PC上。
答案 2 :(得分:0)
我现在已经构建了一个新的数据库,并将所有后端表添加为新的链接表,并解决了这个问题。
我已经检查了尽可能多的设置,并且找不到两个DB之间的任何差异,所以我只能得出结论旧的前端DB已经损坏了。我觉得我最好把这个作为一个答案发布,以防万一其他人遇到同样的问题!