【发布时间】:2019-08-28 11:47:33
【问题描述】:
我很难在 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
【问题讨论】:
-
Table2 是第一个代码中的工作表名称吗?第二版本代码在一个数据库中并调用另一个数据库和工作簿?尝试了第一个代码,但不起作用。尝试反转,以便为 Access 设置 CN,并且 Excel 在 SQL 语句中。也没有用。我无法使任何一个连接字符串都嵌入在 SQL 语句中。除了传递查询之外,我找不到任何在 SQL 语句中显示连接字符串的示例。
-
您使用的是什么 Access 版本和 Excel 版本?
-
在 June7 评论之后。 Linking to Excel 是可接受的解决方案吗?