如何在access数据库中选择带有左联接的excel表-excel VBA

如何在access数据库中选择带有左联接的excel表-excel VBA,excel,ms-access,vba,ado,Excel,Ms Access,Vba,Ado,我很难在ADO中使用两个不同的数据库创建查询,我需要使用不同的源进行大量查询,例如从excel文件中选择,并在access文件中使用左连接 当我使用两个不同的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

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

当我使用两个不同的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
但我需要在access文件中使用left join进行此查询,当我尝试打开记录集时,出现错误:“无法更新数据库或对象为只读”

我的代码:

    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

从主连接字符串中删除Excel 12.0规范,因为该规范将应用于两个源。而是先打开access数据库而不使用Excel 12.0规范

现在仅为工作簿指定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"

希望这有帮助。

表2是第一个代码中的工作表名称吗?第二个版本代码在一个数据库中并调用另一个数据库和工作簿?尝试了第一个代码,但不起作用。尝试将CN设置为Access,Excel位于SQL语句中。也不管用。我无法使这两个连接字符串都嵌入到SQL语句中。除了传递查询,我在SQL语句中找不到任何显示连接字符串的示例。您使用的是什么Access版本和Excel版本?下面是6月7日的注释。可接受的解决方案是什么?
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"