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

标签 mysql odbc ms-access-2016 mysql-odbc-connector

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

我已经在我的家用 PC 和笔记本电脑上成功运行了这个 DB 很长一段时间,但最近不得不更换我的笔记本电脑,所以刚刚安装(很好地复制到)一个新笔记本电脑上。在这个新实例上,我的日期过滤器都不起作用。在调查中,我注意到了非常奇怪的行为:如果我打开其中一个链接表,单击其中一个日期列中的任何值并选择仅过滤该值的选项,则不会显示任何内容。例如,如果我写一个查询来过滤

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

什么都没有返回。如果我将其重写为

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

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

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

我正在运行完全更新的 Windows 10 家庭版,在两台机器上都装有 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 格式的转换。它显然在我运行过的所有其他机器上都表现良好。

最佳答案

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

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

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

NumDate: CDbl([Date])

或者你真的有文本:

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

关于mysql - DateTime 列在链接到 MySQL 后端的 MS Access 表中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454177/

相关文章:

Python:如何在 Windows 7 x64 上安装 mysqldb?

sql-server - Ubuntu 中的 RODBC 将文本字符串截断为 255 个字符

php - MS SQL 服务器、PHP、PDO、ODBC : Login failed for user

ms-access - 如何更改 MS Access 2016 中的默认数据表字体?

mysql - 检索插入数据库的最后记录值的最佳方法

mysql - 在 MySQL 中创建具有随机名称的临时表

mysql - 如何验证错误字符并从您的输入内容中取消它们的影响? (MySQL 请求/Joi)

database - iODBC 在 Mac OSX 10.6.4 下不工作

c# - "Error: System.Data.OleDb.OleDbException (0x80004005): The following query has been corrupted: ' '

vba - MS Access复制表到另一个表VBA代码