excel - 如何在Access数据库中使用左连接从Excel表中进行选择 - EXCEL VBA

标签 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.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 文件中使用左连接进行此查询,当我尝试打开记录集时,出现错误:“无法更新数据库或对象是只读的”。

我的代码:

    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 规范

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"

希望这有帮助。

关于excel - 如何在Access数据库中使用左连接从Excel表中进行选择 - EXCEL VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55554597/

相关文章:

java - 如何使用java中的sql查询列出MS Access数据库文件中的所有表名称?

ms-access - 是否有一种简单的方法可以在此 Access 数据库架构中填充下拉列表?

java - 无法使用 java 连接我的 ms access

excel - 创建行堆叠算法

vba - 删除连续的重复项 : "File sharing lock count exceeded" at 9k of 1m records

vba - 删除多个工作表中的内容 - Excel VBA

string - VBA函数返回字符串类型不匹配错误

excel - 更改图表形状文本框的颜色(Excel VBA)

excel - 为什么如果字符数超过 253,TEXT 函数不返回任何结果?

excel - Microsoft Excel 连接 #VALUE!错误