Access 没有仅限时间的字段类型(Access Date/Time 字段同时具有日期和时间组件),并且 ODBC 链接表中的任何未知字段类型通常映射到 Text。因此,如果您有一个带有 time(7) 列的 SQL Server 表...
CREATE TABLE [dbo].[TimeTest](
[Id] [int] NOT NULL,
[BeginTimeOff] [time](7) NULL,
[EndTimeOff] [time](7) NULL
...
那么Access中对应的ODBC链接表将有Text(255)列代替:
如果您想直接使用链接表中的列,则必须先将值转换为 Access 将接受的形式,然后才能使用 DateDiff() 等函数对其进行计算。具体来说,访问日期/时间值不支持小数秒,因此您必须删除它们。也就是说,
CDate("07:59:00.0000000")
将失败并出现“类型不匹配”错误(运行时错误 13),而
CDate("07:59:00")
工作正常。您可以使用InStr()、Left()、Mid() 等字符串操作函数来去除字符串的小数部分。
另一种方法是创建一个 SQL Server 视图,将 DATE(7) 列转换为 DATETIME
CREATE VIEW [dbo].[TimeView]
AS
SELECT
Id,
DATEADD(day, -2, CONVERT(DATETIME, BeginTimeOff)) AS BeginTimeOff,
DATEADD(day, -2, CONVERT(DATETIME, EndTimeOff)) AS EndTimeOff
FROM dbo.TimeTest
然后,如果您链接到该视图,列将在 Access 中显示为 Date/Time 值