【问题标题】:Subquery using SELECT ADODB Excel Not Working (VBA)使用 SELECT ADODB Excel 不工作 (VBA) 的子查询
【发布时间】:2021-07-06 16:14:28
【问题描述】:

我正在尝试使用 ADODB Excel 中的子查询从其他表中选择数据。这是我的代码:

Sub CopyData()
    Dim cmd As String
    If OpenConnection() = True Then 'The connection function already created in my module
        cmd = "SELECT * FROM (SELECT [SheetName] FROM `Breakdown structure library$` WHERE [Name (Name *)]='WBS');"
        Rcdset.Open cmd, Con, adOpenStatic, adLockBatchOptimistic
        With shTemp
            .Cells.Delete
            .Range("A1").CopyFromRecordset Rcdset
        End With
        If Con.State Then Con.Close
    End If
End Sub

结果是错误的:

运行时错误“-2147217904”(80040e10):没有为一个或多个参数指定值

我知道发生了什么。您必须在工作表名称末尾添加“$”才能在 ADODB Excel 中执行查询,例如:

SELECT * FROM `MyTable` '(not working in ADODB Excel, but working in Access database)
SELECT * FROM `MyTable$` '(working in ADODB Excel)

我不知道如何让sql子查询自动识别表,我们要在哪里选择数据。

【问题讨论】:

  • 您是否尝试从子选择中获取结果作为选择中的表名?
  • @NoChance : 结果是我单独执行时的表名。
  • @CDP1802:是的!这就是我想要的!

标签: sql excel vba adodb


【解决方案1】:

不能使用子选择来确定选择的表名,使用2个查询。

    Dim sTableName As String, SQL As String, rcdset As New ADODB.Recordset
    If OpenConnection() = True Then 'The connection function already created in my module
      
        SQL = " SELECT [SheetName] " & _
              " FROM `Breakdown structure library$` " & _
              " WHERE [Name (Name *)]='WBS';"
        sTableName = con.Execute(SQL)(0)

        SQL = " SELECT * FROM [" & sTableName & "$]"
        rcdset.Open SQL, con, adOpenStatic, adLockBatchOptimistic
        With shTemp
            .Cells.Delete
            .Range("A1").CopyFromRecordset rcdset
        End With
        If con.State Then con.Close
     
     End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多