You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DLookup查询DateTime Extended字段时出现类型不匹配错误

解决Access中DLookup查询Azure链接表DateTime Extended字段的类型不匹配问题

问题原因

SQL Azure的DateTime Extended类型(对应datetime2或datetimeoffset)与Access的Jet/ACE引擎日期类型存在兼容性差异,DLookup依赖ACE引擎处理链接表数据时,无法将该类型的值正确转换为Access可识别的变体类型,因此触发类型不匹配错误。

解决方案

1. 通过Access查询转换字段类型

创建Access查询将DateTime Extended字段转为Access原生日期类型,再对该查询使用DLookup:

  • 创建查询qryBranchLocations,SQL语句如下:
SELECT LocationID, CDate(LastUpdated) AS ConvertedLastUpdated
FROM tblBranchLocations
  • 在立即窗口执行:
?DLookup("ConvertedLastUpdated", "qryBranchLocations", "LocationID = 1")

2. 使用ADO记录集替代DLookup

ADO对SQL Azure的类型支持更完善,直接通过ADO读取字段值:

Dim conn As Object, rs As Object
Set conn = CreateObject("ADODB.Connection")
' 复用链接表的连接字符串
conn.Open CurrentDb.TableDefs("tblBranchLocations").Connect
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT LastUpdated FROM tblBranchLocations WHERE LocationID = 1", conn
If Not rs.EOF Then
    Debug.Print rs("LastUpdated").Value
End If
' 清理对象
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing

3. 重新链接表并指定字段类型

删除现有链接表,重新链接时在向导中手动将LastUpdated字段类型指定为Access的Date/Time,部分场景下可修复类型映射问题。

关于DLookup返回变体仍报错的说明

DLookup确实返回变体类型,但变体的类型转换依赖ACE引擎对数据源字段类型的解析。由于ACE引擎未原生支持SQL Azure的DateTime Extended类型,尝试将该字段值写入变体时无法完成有效转换,最终抛出类型不匹配错误。

内容的提问来源于stack exchange,提问作者TileHittinMofo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:32:41