【问题标题】:How to select from excel table with left join in access database - EXCEL VBA如何在访问数据库中使用左连接从excel表中进行选择-EXCEL VBA
【发布时间】:2019-08-28 11:47:33
【问题描述】:

我很难在 ADO 中使用两个不同的数据库创建查询,我需要使用不同的来源进行大量查询,例如从 excel 文件中选择并在访问文件中使用左连接。

当我使用两个不同的 excel 文件时,如下代码可以正常工作。

    Dim SQL As String
    Dim CN As New ADODB.Connection
    Dim rs As New ADODB.Recordset

    Set CN = New ADODB.Connection
    Set rs = New ADODB.Recordset

    'Open connection
    CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\ExcelTable.xlsx" & _
    ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    SQL = " SELECT * FROM [table1$] t1" _
        & " LEFT JOIN (SELECT * FROM" _
        & " [Excel 12.0 Xml;HDR=Yes;Database=C:\db1.xlsx].table2) t2" _
        & " ON t1.[reftable1] = t2.reftable2"

    rs.Open SQL, CN, adOpenDynamic

    If rs.EOF = False Then


        Do While Not rs.EOF
            debug.print rs("field1")
            rs.MoveNext
        Loop


    End If

    rs.Close
    CN.Close

但我需要在访问文件中使用左连接进行此查询,当我尝试打开记录集时出现错误:“无法更新数据库或对象是只读的”。

我的代码:

    Dim SQL As String
    Dim CN As New ADODB.Connection
    Dim rs As New ADODB.Recordset

    Set CN = New ADODB.Connection
    Set rs = New ADODB.Recordset

    'Open connection
    CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\ExcelTable.xlsx" & _
    ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    SQL = " SELECT * FROM [table1$] t1" _
        & " LEFT JOIN (SELECT * FROM" _
        & " [Data Source=C:\db1.accdb].table2) t2" _
        & " ON t1.[reftable1] = t2.reftable2"

    rs.Open SQL, CN, adOpenDynamic

    If rs.EOF = False Then


        Do While Not rs.EOF
            debug.print rs("field1")
            rs.MoveNext
        Loop


    End If

    rs.Close
    CN.Close

【问题讨论】:

  • Table2 是第一个代码中的工作表名称吗?第二版本代码在一个数据库中并调用另一个数据库和工作簿?尝试了第一个代码,但不起作用。尝试反转,以便为 Access 设置 CN,并且 Excel 在 SQL 语句中。也没有用。我无法使任何一个连接字符串都嵌入在 SQL 语句中。除了传递查询之外,我找不到任何在 SQL 语句中显示连接字符串的示例。
  • 您使用的是什么 Access 版本和 Excel 版本?
  • 在 June7 评论之后。 Linking to Excel 是可接受的解决方案吗?

标签: excel ms-access vba ado


【解决方案1】:

从主连接字符串中删除 Excel 12.0 规范,因为它适用于两个来源。而是先打开 access 数据库没有 Excel 12.0 规范

CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=c:\db1.accdb"

现在指定 Excel 12.0 的扩展属性仅适用于工作簿

SQL = " SELECT t1.name, t2.unit FROM [Excel 12.0;HDR=Yes;Database=C:\ExcelTable.xlsx;].[Table1$] t1" _
    & " LEFT JOIN (SELECT * FROM Table1) t2" _
    & " ON t1.reftable1 = t2.reftable2"

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多