【问题标题】:Best way to handle time formats from SQL Server in Access front end在 Access 前端中处理来自 SQL Server 的时间格式的最佳方法
【发布时间】:2020-07-12 18:31:26
【问题描述】:

我已将以前在 Access 中的数据库迁移到 SQL Server,现在我正在重建我的 Access 前端,以便使用无 DSN 链接的 SQL Server 后端。我在时间字段中遇到了新数据输入的问题。我得到的错误是ODBC--update on a linked table...failed. [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification (#0)。我假设这与 Access 将数据从 SQL Server 转换为短文本的方式有关,它是 time(0) 数据类型。

我的问题是在 Access 和 SQL Server 中处理“时间”数据的最佳方式是什么?理想情况下,用户会在 Access 中简单地输入数据,例如“0130”,这意味着“1 小时 30 分钟”(我们从不记录秒数)。理想情况下,SQL Server 中的数据将被格式化为某种时间或 datetime/datetime2 格式。

我可以修改 Access 前端或 SQL Server 后端(或两者)的格式或代码——最干净的方法是什么?

【问题讨论】:

  • 迁移到 SQL Server 后,您的日期/时间代码应该是零更改,您的表单和 SQL 应该是零更改,甚至对使用日期/时间数据的 VBA 代码进行零更改.如果您必须进行更改,那么您可能会将列迁移到 datetime2 而不是 datetime。如果您在 sql server 上使用 datetime2,则必须使用必须在每个工作站上安装的较新的本机 11(或更高版本)驱动程序。或者使用 SQL 驱动程序中的长时间构建,并使用日期时间数据类型。设计模式下的任何访问链接表 - 检查日期/时间列是否被视为文本

标签: sql-server vba ms-access


【解决方案1】:

最好的方法是在 SQL Server 中将用户数据类型 DateTime。任何 ODBC 驱动程序都将作为 VBA 的本机日期时间从 Access 中读取和写入。

如果您必须在 SQL Server 中使用 DateTime2,则必须安装和使用其中一种从不 ODBC 驱动程序,而不是 Windows 附带的“SQL Server”ODBC 驱动程序,因为它无法读取微秒分辨率DateTime2。

您不应该使用 SQL Server 的其他日期/时间数据类型:时间和短日期

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多