Access 365运行DAO读取附件字段代码报错误13类型不匹配
问题答复
这个报错确实是64位Microsoft 365 Access 2206版本更新引入的DAO库已知bug,同期有大量常年稳定运行的Access应用都触发了完全一致的错误13类型不匹配问题,和你的代码逻辑无关。
故障原因微软在2206版本的64位DAO组件更新中,修改了复杂类型字段(附件字段、多值查阅字段等Access特殊字段类型)的接口返回规则:
- 历史版本中,调用
Recordset2(字段名)读取附件类复杂字段时,返回的对象可以直接赋值给DAO.Field2类型的强类型变量 - 2206版本64位DAO返回的复杂字段对象接口类型发生了未做公开说明的变更,和
DAO.Field2类型声明不匹配,直接触发类型不匹配报错。
你的代码触发报错的逻辑完全匹配这个bug的特征:报错行是给DAO.Field2类型的fieldAttachment变量赋值附件字段对象,运行版本正好是存在问题的2206 64位版本。
可用解决方法
你可以根据实际场景选以下任意一种方案修复:
- 调整变量声明为后期绑定:把
Dim fieldAttachment As DAO.Field2修改为Dim fieldAttachment As Object,后续操作附件字段的代码不需要做任何改动即可正常运行,是成本最低的修复方案 - 升级Office版本:微软在后续2208及更高版本的更新中已经修复了这个DAO兼容性问题,直接把Access更新到最新正式版即可彻底解决问题
- 临时回退版本:如果暂时不方便改代码或者升级,可以把Office回退到2205及更早的稳定版本,暂时关闭自动更新等待修复推送;另外32位版本的Access 2206不存在这个bug,也可以临时切换到32位版本过渡。
修复后的代码示例如下:
Dim Recordset2 As DAO.Recordset2 Dim fieldAttachment As Object ' 替换原DAO.Field2声明即可 stringSQLText = "SELECT [" & stringTable & "].ID" & vbCrLf stringSQLText = stringSQLText & " , [" & stringTable & "].[" & stringFieldName & "]" & vbCrLf stringSQLText = stringSQLText & " FROM [" & stringTable & "]" & vbCrLf stringSQLText = stringSQLText & " WHERE ((([" & stringTable & "].ID)=" & longID & "));" Set Recordset2 = CurrentDatabase.OpenRecordset(stringSQLText, dbOpenSnapshot) ' 该行不再触发类型不匹配报错 Set fieldAttachment = Recordset2(stringFieldName)
内容的提问来源于stack exchange,提问作者Mark3308
相关产品推荐
相关产品推荐

