ODBC 调用失败 - 从 32 位 ODBC 5.1 移动到 64 位 5.3 后出现随机日期溢出错误

ODBC call failed - Random date overflow errors after moving from 32-bit ODBC 5.1 to 64-bit 5.3

背景:

问题:

问题:

我不明白为什么在似乎没有理由删除日期时间或 "now" 的时间时却说日期溢出?由于日期时间字段已经在数据库中并且 now() 将获取当前日期和时间,因此不应该有任何无效日期?

任何关于问题可能是什么或如何 debug/log 任何可能有帮助的帮助都将不胜感激。

在 ODBC 驱动程序中打开跟踪不是一个选项,因为它是随机发生的,有太多的流量,因此这会减慢一切,以至于什么都不会发生。

请注意,我也确实遇到过 sql 日期溢出错误消息是正确的。似乎在 5.3 之前,当将日期时间插入日期字段时,它会自动 t运行cated,因为已经成功 3000 次的 sql 开始失败。因此,这个 sql 已通过首先从字段中提取日期来修复。但是其他错误一定是不同的。

这似乎是 MySQL Connector/ODBC 5.2 及更高版本的问题。网络搜索导致 this thread on another site, which in turn led to this unresolved bug report。请注意,这是一个更广泛的 MySQL Connector/ODBC 问题;它不特定于 Access 应用程序。

MySQL Connector/ODBC 5.1.13 仍然可供下载,因此您最方便的解决方案可能是简单地使用该版本,直到相关代码停止服务。您的其他选择可能包括:

  • 使用较新版本的 MySQL 服务器([更好?] 支持小数秒),或
  • 调整 Access SQL 查询以使用 Now() 函数以外的其他功能(可以理解,您希望避免)。

Oracle 发布了包含错误修正的新版本:5.3.8

这个错误似乎是在版本 5.1.11 中引入的错误。

在高级选项中现在有一个日期溢出复选框,必须勾选该复选框才能在出现错误时继续执行代码。

Oracle 对修复的回复: “为了您的信息,修复方法是在 C 或 C++ 中可以使用 SQL_TIMESTAMP_STRUCT 读取或写入 DATE 类型。 这个结构可以包含日期和时间。 错误(日期溢出)是在操作本应为 DATE-only 时生成的,此结构的时间值非零。 这是 ODBC API 要求的规范方法,但是,有时会造成不便,例如应用程序没有打扰 用 0 值初始化整个结构,因为它知道它只需要 DATE 部分,但 TIME 分数的随机值可能会导致错误,尽管被截断了。 引入了一个新选项以继续执行查询而不是 return 错误。 服务器将忽略 TIME 部分,结果就像有零一样。"