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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:02