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参数,也可能加重驱动识别异常。
解决步骤
- 首先删除类初始化方法中所有和
Prompt属性相关的代码,你已经在连接串中写死了用户名密码,不需要该配置项,修改后的初始化代码如下:
Private Sub Class_Initialize() Set mCnn = New ADODB.Connection With mCnn .CursorLocation = adUseServer .mode = adModeRead .IsolationLevel = adXactIsolated .CommandTimeout = 200 End With End Sub
- 补全类中64位环境下的连接串参数,和测试代码保持一致,增加
Persist Security Info=True:
connstring = "Provider=OraOLEDB.Oracle;Password=" & pw & ";User ID=" & uid & ";Data Source=" & HostIPSSID & ";Persist Security Info=True;"
- 如果修改后仍报错,将类中连接对象的创建方式改为晚绑定,和测试代码逻辑对齐,避免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
相关产品推荐
相关产品推荐

