2015-11-04 111 views
0

我一起工作的以下设置:单MySQL查询在多个数据库

考虑两个MySQL数据库:abcxyz,每个都有自己的表:abctable_in_abcxyztable_in_xyz。我需要运行一个简单的MySQL查询,从table_in_abc中选择元素,加入关系为table_in_xyz

在工作台下面的查询工作正常:

SELECT AB.* , XY.* 
FROM `abc`.`table_in_abc` AB 
LEFT JOIN `xyz`.`table_in_xyz` XY ON AB.`ID` = XY`ID` 

我想实现在VBA同样的事情。我能够在单个数据库上运行MySQL查询(请参见下面的示例),但在查询涉及多个数据库时无法这样做。

对单个数据库的简单查询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 
+0

是在同一个MySQL实例这些数据库?你也可以添加你的VBA代码,你做了一个'LEFT JOIN'命令,并且你收到了什么错误?过去我遇到了麻烦,用我的数据类型来运行查询被截断。尝试休息并确认您的查询字符串。 – nbayly

+0

另请注意,在您的Workbench示例中,您使用'AB'和'XY'而不是'abc'和'xyz'。这只是一个错字或者它可能是问题的原因。 – nbayly

回答

0

我发现了一种通过简单地设置两个连接到两个不同的数据库(在同一个MySQL实例的工作),以解决我的上述问题。

我的代码看起来像这样:

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