如何创建来自不同数据库的嵌套查询的记录集

How do I create a recordset of nested queries from different databases

以下 2 个查询取自不同数据库的表

MyQuery = "Select * from " & "T1"
MyQuery2 = "Select * from " & "T2" 

我想将它们嵌套在以下查询中

Dim rrst As New ADODB.Recordset     
mkQry = "SELECT x.*" _
        & "FROM (" & MyQuery & ") x LEFT JOIN (" & MyQuery2 & ") y ON " _
        & "(x.F1 = y.F2) AND " _
        & "(x.F1 = y.F2) AND " _
        & "(x.F1 = y.F2) AND " _
        & "(x.F1 = y.F2) AND " _
        & "(x.F1 = y.F2)" _
        & "WHERE (((y.F2) Is Null))"

rrst.Open mkQry
Worksheets("TST").Range("A1").CopyFromRecordset rrst

但是,我收到一个错误:
The connection cannot be used to perform this operation 在以下行中:rrst.Open mkQry

我想这与 MyQueryMyQuery2 有关,它们都来自不同的数据库。 有没有办法让它工作?

学到了一些新东西 - Excel 可以通过一个 SQL 语句从多个 Access 文件中提取数据。你在嵌套的正确道路上。必须设置一个连接,可以是工作簿或其中一个Access文件,那么其他数据源必须嵌套嵌入文件路径。示例:

  1. 使用带早期绑定的 ADODB 对象连接到工作簿,因此需要引用 Microsoft ActiveX 数据对象 x.x 库。
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName & ";HDR=Yes';"
rs.Open "SELECT H.*, P.* FROM (SELECT * FROM Holidays IN 'C:\Users\Owner\June\Umpires.accdb') AS H " & _
        "INNER JOIN (SELECT * FROM Projects IN 'C:\Users\Owner\June\LabData.accdb') AS P " & _
        "ON H.HolID = P.ProjRecID", cn, adOpenStatic, adLockReadOnly
  1. 连接到一个 Access 文件
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\Users\Owner\June\LL\Umpires.accdb'"
rs.Open "SELECT Holidays.*, Pjt.* FROM Holidays INNER JOIN (SELECT * FROM Projects IN 'C:\Users\Owner\June\DOT\Lab\Data\LabData.accdb') AS Pjt ON Holidays.HolID = " & _
         "Pjt.ProjRecID ", cn, adOpenStatic, adLockReadOnly
  1. 具有早期绑定的 DAO,因此请参考 Microsoft DAO 3.6 对象库
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\Users\Owner\June\LL\Umpires.accdb")
Set rs = db.OpenRecordset("SELECT Holidays.*, Pjt.* FROM Holidays " & _
        "INNER JOIN (SELECT * FROM Projects IN 'C:\Users\Owner\June\DOT\Lab\Data\LabData.accdb') AS Pjt " & _
        "ON Holidays.HolID = Pjt.ProjRecID ")

我用 PowerQuery add-in 做了一个快速测试,它能够从两个 Access 文件中提取并将数据集保存到工作表。这确实允许将两个数据源作为合并数据集 'live' link。