Excel VBA连接.mdb数据库执行SELECT语句报3709错误如何解决
VBA访问Access数据库报错3709的排查解决方法
核心问题修复
你当前报错最直接的原因是打开Recordset时未关联已经创建的数据库连接对象,rst.Open方法需要显式传入已打开的连接作为参数,把你原来的rst.Open "SELECT * FROM Tabelle1"改成:
rst.Open "SELECT * FROM Tabelle1", objcon
如果是用带条件的查询,注意字符串类型的字段值需要加单引号包裹,原来注释的条件查询行改成:
rst.Open "SELECT * FROM Tabelle1 WHERE VK='" & Testuser & "'", objcon
其他可能的异常排查项
- 先确认ADODB引用已正确添加:打开VBA编辑器,点击「工具」-「引用」,勾选
Microsoft ActiveX Data Objects x.x Library(x.x为版本号,选列表里最高的版本即可) - 增加连接状态校验,避免连接打开失败的情况,在
objcon.Open代码行后加一段校验逻辑:
If objcon.State <> adStateOpen Then MsgBox "数据库连接打开失败,请检查文件路径、驱动是否正常" Exit Sub End If
- 确认Access数据库路径正确:检查
C:\Daten.mdb文件是否真实存在,当前Windows账号对该路径有读取权限 - 确认表名拼写正确:你代码里定义了
strTab = "Daten",但查询的表是Tabelle1,确认数据库里实际存在的表名和查询语句里的拼写一致
优化后的完整代码
Sub DatenLesen() Dim strDB As String Dim strTab As String Dim objcon As ADODB.Connection Dim rst As ADODB.Recordset Dim Zeile As Long Dim Testuser As String ' 建议显式声明所有变量 strDB = "C:\Daten.mdb" strTab = "Daten" ' 确认实际表名,和查询语句保持一致 Testuser = "TestUser" Set objcon = New ADODB.Connection ' 打开数据库连接 objcon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDB ' 校验连接状态 If objcon.State <> adStateOpen Then MsgBox "数据库连接失败" Exit Sub End If Set rst = New ADODB.Recordset ' 打开记录集时传入连接对象 rst.Open "SELECT * FROM Tabelle1", objcon ' 带条件的写法 ' rst.Open "SELECT * FROM Tabelle1 WHERE VK='" & Testuser & "'", objcon If rst.RecordCount > 0 Then MsgBox "OK" ' 原有写列表框的逻辑可以正常放开使用 Else MsgBox "Nichts gefunden" End If ' 用完记得关闭连接和记录集,释放资源 rst.Close objcon.Close Set rst = Nothing Set objcon = Nothing End Sub
内容的提问来源于stack exchange,提问作者fre4k
相关产品推荐
相关产品推荐

