VBA-код для извлечения данных из Mysql DB в Mac Excel 2011
Я использовал код ADODB в Windows для извлечения данных из базы данных Mysql, и он работал нормально. Тем не менее, я не могу заставить свою книгу Excel (используя ADODB) работать с Excel Mac 2011. После долгих поисков я нашел разъем ODBC от Actual tech и смог извлечь три строки, используя Microsoft Query. Но я хочу, чтобы это было сделано с использованием кода VBA, но я не смог этого сделать. Кто-нибудь получил это на работу? Если да, не могли бы вы предоставить мне пример кода. Заранее спасибо!!
PS: я знаю, что существует аналогичный существующий вопрос, но ссылка, приведенная в ответе, больше не работает. следовательно, я задал новый вопрос
Кроме того, если кому-то нужна ссылка, чтобы сделать это через Microsoft Query, вот ссылка: http://www.agentjim.com/MVP/Excel/2011Relational7Queries.html
Вот код, который я использую в Windows:
Sub getMysqlDBdata()
Dim Cn As Object
Dim sqlQa as string
dim temparray1 as variant
Source = "MySQL"
mysql_driver = "MySQL ODBC 5.2 ANSI Driver"
sqlQa = "select * from test.TestTable;"
Set Cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Cn.Open "Driver={" & "MySQL ODBC 5.2 ANSI Driver" & "};Server=" & "127.0.01" & ";Database= test;UID=" & "root" & ";PWD=" & "12345"
rs.Open sqlQa, Cn, adOpenStatic
temparray1 = rs.GetRows()
rs.Close
Set rs = Nothing
End Sub
1 ответ
После долгих поисков я наткнулся на этот пример кода, предоставленный Брайаном Дюшеном в MSDN:
Sub TestSqlConnection()
Dim sqlstring As String
Dim connstring As String
Dim sLogin As String
sLogon = "Uid=myUserID;Pwd=myPassowrkd;"
sqlstring = "select * from zitemloc"
connstring = "ODBC;DSN=myDSN;" & sLogon
ActiveSheet.Range("B1:t2000").Clear
Dim qt As QueryTable
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next qt
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("B1"), Sql:=sqlstring)
.BackgroundQuery = False
.Refresh
End With
Set qt = ActiveSheet.QueryTables(1)
Dim rowCount As Integer
rowCount = UBound(qt.ResultRange.Value)
Dim ix, iy As Integer
Dim data As Variant
Dim colCount As Integer
colCount = qt.ResultRange.Columns.Count
For ix = 1 To rowCount
If Not IsArray(data) Then
ReDim data(rowCount - 1, colCount - 1)
End If
For iy = 1 To qt.ResultRange.Columns.Count
data(ix - 1, iy - 1) = qt.ResultRange.Value2(ix, iy)
Next
Next
End Sub