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

Office365升级后Access类模块连接Oracle12报数据源名过长错误

问题根因
  • 核心冲突是类初始化阶段设置的Prompt属性和64位Office 365自带的ADODB组件、OraOLEDB.Oracle驱动存在兼容问题:你使用的是OLEDB Provider连接逻辑,但Prompt是ODBC数据源的专属配置项,Office 2016对该混用场景有兼容容错,升级到365后ADODB会错误触发ODBC解析逻辑,把完整OLEDB连接串识别为ODBC数据源名称,因此抛出数据源名称过长的报错。
  • 次要差异是类中创建连接用的是New ADODB.Connection提前绑定方式,测试代码用的是CreateObject晚绑定方式,Office版本升级后提前绑定的ADODB类库版本可能存在适配偏差。
  • 类中的连接串缺少测试代码里的Persist Security Info=True参数,也可能加重驱动识别异常。
解决步骤
  1. 首先删除类初始化方法中所有和Prompt属性相关的代码,你已经在连接串中写死了用户名密码,不需要该配置项,修改后的初始化代码如下:
Private Sub Class_Initialize()
    Set mCnn = New ADODB.Connection
    
    With mCnn
        .CursorLocation = adUseServer
        .mode = adModeRead
        .IsolationLevel = adXactIsolated
        .CommandTimeout = 200
    End With
End Sub
  1. 补全类中64位环境下的连接串参数,和测试代码保持一致,增加Persist Security Info=True:
connstring = "Provider=OraOLEDB.Oracle;Password=" & pw & ";User ID=" & uid & ";Data Source=" & HostIPSSID & ";Persist Security Info=True;"
  1. 如果修改后仍报错,将类中连接对象的创建方式改为晚绑定,和测试代码逻辑对齐,避免ADODB类库版本冲突:
    首先取消工程引用中的Microsoft ActiveX Data Objects库引用,然后修改初始化代码:
Private Sub Class_Initialize()
    Set mCnn = CreateObject("ADODB.Connection")
    
    With mCnn
        ' 晚绑定时枚举常量需要替换为对应数值:adUseServer=2,adModeRead=1,adXactIsolated=4
        .CursorLocation = 2
        .mode = 1
        .IsolationLevel = 4
        .CommandTimeout = 200
    End With
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:00