VBA连接远程MySQL闲置后触发"odbc driver does not support..."错误求助
解决VBA连接MySQL闲置后报错的问题
我之前处理过类似的ODBC连接闲置失效的情况,给你几个实际可行的思路,应该能解决你的问题:
先检查连接状态,无效则重连
这是最直接的临时解决方案。核心问题其实是:闲置后MySQL服务器主动断开了连接,但你的VBA连接对象还误以为连接是打开的,再次操作时驱动就返回了这个模糊的错误提示。你可以在每次执行数据库操作前,先判断连接是否还处于活跃状态,如果已经断开就重新建立连接。示例VBA代码:Dim Conn As ADODB.Connection Set Conn = New ADODB.Connection ' 检查连接状态,无效则重新连接 If Conn.State <> adStateOpen Then Conn.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql1008.mochahost.com;Database=XXXXXXXXX;User=XXXXXXXXX;Password=XXXXXXXXX;" Conn.Open End If ' 执行你的数据库操作... ' 可选:如果不是频繁操作,操作完成后关闭连接 ' Conn.Close ' Set Conn = Nothing升级ODBC驱动版本
你用的MySQL ODBC 3.51 Driver是非常老旧的版本,它对现代MySQL服务器的长连接支持存在不少bug。建议直接升级到最新的MySQL ODBC 8.0 Unicode Driver,然后修改连接字符串为:Driver={MySQL ODBC 8.0 Unicode Driver};Server=mysql1008.mochahost.com;Database=XXXXXXXXX;User=XXXXXXXXX;Password=XXXXXXXXX;Connection Timeout=30;新版本驱动对连接超时、闲置重连的处理成熟得多,大概率能彻底解决这个问题。
调整MySQL服务器的超时参数
有些主机商会把MySQL的wait_timeout和interactive_timeout设置得很短(比如几分钟),用来释放闲置连接。你可以先执行SQL语句查看当前设置:SHOW VARIABLES LIKE '%timeout%';如果发现
wait_timeout的值远小于你的需求,有两种处理方式:- 联系主机商调整全局的超时参数;
- 在每次建立连接后,执行一条SQL临时延长当前会话的超时时间:
SET SESSION wait_timeout = 3600; -- 设置为1小时,可根据需求调整
改用短连接模式
如果你的应用不需要持续保持连接,建议每次执行数据库操作时才打开连接,操作完成后立即关闭并释放连接对象。虽然会多一点连接开销,但能彻底避免闲置断开的问题,示例代码:Sub ExecuteDBOperation() Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Set Conn = New ADODB.Connection Conn.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server=mysql1008.mochahost.com;Database=XXXXXXXXX;User=XXXXXXXXX;Password=XXXXXXXXX;" Conn.Open ' 执行查询或更新操作 Set Rs = Conn.Execute("SELECT * FROM your_table;") ' 处理结果... ' 关闭并释放资源 Rs.Close Set Rs = Nothing Conn.Close Set Conn = Nothing End Sub
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

