Access VBA中能否使用含Failover Partner选项的ADO连接字符串?
当然可以!我之前在Access VBA项目里用过带Failover Partner的ADO连接字符串来支持SQL Server的故障转移(比如Always On可用性组),给你梳理一下具体的实现要点和注意事项:
核心前提:选对OLE DB提供者
老的SQLOLEDB提供者不支持故障转移伙伴功能,你需要使用微软官方的新驱动:
MSOLEDBSQL(推荐,最新的OLE DB Driver for SQL Server)SQLNCLI11(SQL Server Native Client 11.0,兼容旧版SQL Server)
示例连接字符串
直接把故障转移伙伴配置写到ConnectionString里即可,格式如下:
' 使用MSOLEDBSQL驱动的示例 gcnn.ConnectionString = "Provider=MSOLEDBSQL;Server=你的主服务器名\实例名;" & _ "Database=目标数据库名;Uid=数据库账号;Pwd=密码;" & _ "Failover Partner=你的故障转移服务器名\实例名;"
结合你的代码修改
我把你给出的函数补全并调整成支持故障转移的版本,注意完善错误处理和连接状态判断:
Public Function OpenADOConnection() As Boolean On Error GoTo err_trap ' 若全局ADO连接未打开则将其打开 ' 连接成功返回TRUE Dim boolState As Boolean boolState = False ' 初始化状态为失败 If gcnn Is Nothing Then Set gcnn = New ADODB.Connection ' 实例化全局连接对象 End If ' 仅当连接未打开时尝试建立连接 If gcnn.State <> adStateOpen Then ' 替换成你实际的服务器、数据库和账号信息 gcnn.ConnectionString = "Provider=MSOLEDBSQL;Server=MainSQLServer\Instance;" & _ "Database=MyDB;Uid=DBUser;Pwd=DBPass;" & _ "Failover Partner=FailoverSQLServer\Instance;" gcnn.Open End If ' 验证最终连接状态 If gcnn.State = adStateOpen Then boolState = True End If Exit Function err_trap: MsgBox "数据库连接失败: " & Err.Description, vbCritical boolState = False ' 清理连接资源 If Not gcnn Is Nothing Then If gcnn.State = adStateOpen Then gcnn.Close Set gcnn = Nothing End If End Function
关键注意事项
- 引用正确的ADO库:在Access VBA编辑器的「工具」→「引用」里,选择
Microsoft ActiveX Data Objects 6.1 Library(或更高版本),避免用旧版ADO导致兼容性问题 - 权限一致性:确保你的数据库账号在主服务器和故障转移伙伴服务器上都有相同的数据库访问权限
- 测试故障场景:一定要手动模拟主服务器宕机的情况,验证连接是否能自动切换到故障转移伙伴(不要只依赖配置,实际测试才靠谱)
- 错误处理:故障转移过程中可能会出现短暂的连接超时或错误,完善的错误捕获能让你的程序更健壮
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

