6

我正在将我的应用程序从 MS-Access FE 和 BE 升级到 MS-Access FE 和 SQL Server BE。我使用 SSMA Access“升迁”工具将所有表从 Access 转换为 SQL,然后使用 ODBC 链接 Access FE 中的 SQL 表。

在我的访问数据库中,一些表具有 DateTime 列,这些列在 SQL Server 的 datetime(0) 列中进行了转换。在 Access 中链接这些表后,Access 将这些列视为文本列,即使它们是 SQL Server BE 中的 datetime2(0) 列。

这会导致一些问题,因为使用日期格式的查询不适用于文本格式。无论如何链接表,以便日期时间(0)字段被Access视为日期时间值?

4

5 回答 5

8

类似问题:已解决

我有一个 SQL 服务器,其字段为 DATETIME2 数据类型,并通过 ODBC 作为 Win7 上 MS Access 中的链接表连接到它。

当使用相同的数据库从两个不同的工作站连接时,一个具有“日期/时间”的正确数据类型,另一个具有“短文本”的数据类型

解决方案:事实证明,链接表是使用两个不同的 DSN 文件建立的,一个列出了“DRIVER=SQL Server”,另一个列出了“DRIVER=SQL Server Native Client 11.0”。为了通过 ODBC 链接获得“日期/时间”数据类型,我需要使用 Client 11.0。

要查看您安装了哪些驱动程序:

From the start menu search for "ODBC"
Select "Data Sources (ODBC)".  
Click on the "Drivers" tab 

您将看到已安装的驱动程序。我有三个。

SQL Server                     6.01.7601.17514
SQL Server Native Client 10.0  2007.100.5500.00
SQL Server Native Client 11.0  2011.110.6020.00

我相信 SQL Server 版本 6 是由 Win7 安装并通过 Windows Update 更新的。如果这就是您所拥有的,您将只能通过链接表从 DATETIME2 SQL DataTypes 中获取 TEXT。

本机客户端分别由 SQL Server Management Studio 2008 和 2012 安装。

您可以从https://www.microsoft.com/en-us/download/details.aspx?id=36434下载并安装 SQL Server Native Client 11.0

于 2016-07-21T19:45:03.070 回答
7

TechNet称,对新数据类型 datetime2 的支持有限。如果可以的话,我会选择日期时间。

于 2010-11-19T20:28:51.303 回答
1

SSMA for Access 会将在 SQL Server 中具有无效值的任何日期/时间字段转换为文本。您应该运行 SSMA 来尝试转换,它会告诉您问题,然后您可以在实际转换之前清理数据。

您必须跳过 SSMA 向导,因为它会在不预览结果的情况下进行升迁。

于 2010-11-21T22:02:16.660 回答
1

我遇到了同样的问题,这就是导致我访问此页面的原因,但我找到了解决方案:问题:从访问 sql server 的链接表将 datetime2 列显示为文本,这具有许多含义,例如日期比较、排序等。

解决方法:将sql server中的datetime2转换为日期时间,访问会立即将该列显示为日期字段

请注意,由于表已经有数据,您不能只更改数据类型,我计划添加新列 datetime 类型,复制数据,删除 orig 列,重命名

如何检查准确性:我在 sql server、datetime、datetime2、date 中创建了一个包含 3 列的表,然后我从 access 链接到它,只有 datetime 在 access 中显示为日期字段,其他 2 列显示为文本

于 2013-02-01T02:34:56.853 回答
-2

通常需要在升迁向导之前验证您的日期。用户倾向于输入 Access 日期字段接受但会导致 SQL Server 错误的“愚蠢”日期。尝试使用“BETWEEN 1/1/1930 和 1/1/2020”等合理范围之外的日期查询您的表,并在重新启动升迁向导之前更正这些日期。
我还发现了一个我没用过但看起来不错的产品:http ://www.upsizing.co.uk/features_translate.aspx

于 2010-11-19T20:34:15.863 回答