【问题标题】:Error 3021 when I run VBA request to a linked table in Access对 Access 中的链接表运行 VBA 请求时出现错误 3021
【发布时间】:2019-11-17 17:44:36
【问题描述】:

我想从 Excel 向 Access 数据库发送请求(查询)。但是当我的请求以链接表为目标时,它会触发 3021 错误。但是,当我在 Access 中运行相同的请求时,请求编辑器(动态集)显示 1300 行。

我已经测试了各种解决方案:

  1. 我尝试使用

    执行请求

    conObj.execute(SQLString)

  2. 然后用下面的,同样的错误

    RecordSet.Open SQL, "DsnODBC"

  3. 终于有了

    RecSet.Open SQL、conn、adOpenForwardOnly、adLockReadOnly、adCmdText

但是没有任何效果;每次我在这一行遇到错误时

LesResult = RecSet.GetRows()

'=========Instansiation des objets=========' 'init object
Set RecSet = New ADODB.recordset
Set conn = New ADODB.Connection
'=========================================='

'===========Connection à la base===========' 'DB connect
conn.ConnectionString = ThisWorkbook.leControler.strConnectString
conn.Open ThisWorkbook.leControler.strConnectString
'=========================================='


Select Case HerbierAdmin.ActiveAction

    Case "PM":
        [Somme code]

        SQL = "SELECT SAP_ClassItems.[Plan de montage] "
        SQL = SQL & "FROM SAP_ClassItems "
        SQL = SQL & "WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));"
        Debug.Print SQL
        Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")

        LesResult = RecSet.GetRows() 'error here
        RecSet.Close

        For i = 0 To UBound(LesResult, 2)
           Me.ListeBox.AddItem (LesResult(0, i)) 'add result to drop down box
        Next

预期结果:查询结果可以添加到下拉列表中。

【问题讨论】:

  • 您将 lesresult 定义为什么?
  • 我将其定义为变体

标签: sql excel vba odbc


【解决方案1】:

跳过变量:

Set RecSet = conn.Execute("SELECT SAP_ClassItems.[Plan de montage] FROM SAP_ClassItems WHERE ((SAP_ClassItems.[Plan de montage] Like 'PM 21S *'));")

    Do until recsec.eof
       Me.ListeBox.AddItem recsec(0) 'add result to drop down box
       recsec.movenext
    loop 
    recsec.close

【讨论】:

  • 我不知道为什么,但是当我在 Excel 中发送此请求时,EOF 直接等于 true。但是,当我在 Access 中运行相同的请求时,请求编辑器会显示 1300 行。所以当我使用你的代码时。我的下拉框中没有添加条目
  • 啊!这里有一个巧妙的陷阱——Access ODBC 驱动程序不支持 * 作为通配符,它​​需要 % ——适当地更改 sql。抱歉不记得了
【解决方案2】:

好的,非常感谢 Harassed Dad。解决方案是在 like 指令上放置 '%' 而不是 '*'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多