2015-11-04 109 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