如何创建来自不同数据库的嵌套查询的记录集
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
我想这与 MyQuery
和 MyQuery2
有关,它们都来自不同的数据库。
有没有办法让它工作?
学到了一些新东西 - Excel 可以通过一个 SQL 语句从多个 Access 文件中提取数据。你在嵌套的正确道路上。必须设置一个连接,可以是工作簿或其中一个Access文件,那么其他数据源必须嵌套嵌入文件路径。示例:
- 使用带早期绑定的 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
- 连接到一个 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
- 具有早期绑定的 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。
以下 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
我想这与 MyQuery
和 MyQuery2
有关,它们都来自不同的数据库。
有没有办法让它工作?
学到了一些新东西 - Excel 可以通过一个 SQL 语句从多个 Access 文件中提取数据。你在嵌套的正确道路上。必须设置一个连接,可以是工作簿或其中一个Access文件,那么其他数据源必须嵌套嵌入文件路径。示例:
- 使用带早期绑定的 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
- 连接到一个 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
- 具有早期绑定的 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。