如何从访问数据库中的左连接中选择excel表 - EXCEL VBA

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从访问数据库中的左连接中选择excel表 - EXCEL VBA相关的知识,希望对你有一定的参考价值。

我很难在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
答案

从主连接字符串中删除Excel 12.0规范,因为它应用于两个源。而是在没有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表 - EXCEL VBA的主要内容,如果未能解决你的问题,请参考以下文章

如何在jooq查询的左连接中检查记录是不是完​​全为空

打开从 Excel 工作表单元格中选择的特定记录的访问表单

arcgis中如何跟excel连接?

vb.net如何与excel建立连接,并从里面查询并读取数据?

使用POI读取EXCEL中的数据如何获得表中实际数据的行数?

如何从访问将 2 个查询导出到 Excel 中的单个工作表