[英]Single MySQL Query on multiple databases
I am working with the following set-up: 我正在使用以下设置:
Consider two MySQL databases: abc
and xyz
, each with their own table: abc
. 考虑两个MySQL数据库: abc
和xyz
,每个数据库都有自己的表: abc
。 table_in_abc
and xyz
. table_in_abc
和xyz
。 table_in_xyz
. table_in_xyz
。 I need to run a simple MySQL query that select elements from the table_in_abc
with a JOIN relationship to table_in_xyz
. 我需要运行一个简单的MySQL查询,该查询从table_in_abc
中选择与table_in_abc
具有JOIN关系的table_in_xyz
。
In Workbench, the following query works fine: 在Workbench中,以下查询可以正常工作:
SELECT AB.* , XY.*
FROM `abc`.`table_in_abc` AB
LEFT JOIN `xyz`.`table_in_xyz` XY ON AB.`ID` = XY`ID`
I am trying to achieve the same things in VBA. 我正在尝试在VBA中实现相同的目的。 I am able to run a MySQL query on a single database (see example below) but unable to do so when the query involves multiple databases. 我能够在单个数据库上运行MySQL查询(请参见下面的示例),但是当查询涉及多个数据库时,则无法执行。
Example of simple VBA query on single database: 在单个数据库上的简单VBA查询示例:
Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=3" '
Set rs1 = New ADODB.Recordset
sqlstr = "SELECT * FROM `abc`.`table_in_abc` WHERE `ID`=" & ID & ";"
rs1.Open sqlstr, conn, adOpenStatic
With Worksheets("Main").Cells(a, 1)
.ClearContents
.CopyFromRecordset rs1
End With
rs1.Close
Set rs1 = Nothing
I found a way to solve my above problem by simply setting two connections to the two different databases (working on the same MySQL instance). 我找到了一种解决方法,可以通过简单地设置两个连接到两个不同数据库的连接(在同一个MySQL实例上工作)来解决上述问题。
My code looks like that : 我的代码如下所示:
Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=3" '
Set conn2 = New ADODB.Connection
conn2.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name2 _
& ";UID=" & user_id2 _
& ";PWD=" & password2 _
& ";OPTION=3" '
' SELECT Query with LEFT JOIN on the two different databases
Set rs1 = New ADODB.Recordset
sqlstr = "SELECT AB.* , XY.* FROM `abc`.`table_in_abc` AB LEFT JOIN `xyz`.`table_in_xyz` XY ON AB.`ID` = XY`ID`"
rs1.Open sqlstr, conn, adOpenStatic
With Worksheets("main").Cells(1, 1)
.ClearContents
.CopyFromRecordset rs1
End With
rs1.Close
Set rs1 = Nothing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.