VBA Mac подключиться к серверу SQL с драйвером ActualTech ODBC
Я уже некоторое время работаю над своей проблемой, и мне кажется, что я не могу найти точного и рабочего ответа, так что вот я... Я новичок в vba, должен признать...,
Моя проблема заключается в следующем:
Я работаю на Mac OS X Yosemite с MS Office 2011 и пытаюсь подключить свою книгу Excel к SQL-базе данных. Это должно быть сделано через vba, так как позже я хочу прочитать данные из базы данных sql, а также записать данные в базу данных. Я не мог найти способ установить соединение с этой базой данных. Я даже скачал актуальный драйвер odbc и настроил свой dsn (хотя я не был уверен, правильно ли я это сделал, не смог найти способ сделать это с помощью sql-сервера на домашней странице....)
Следующий код это все, что я мог найти, но я все еще получаю ошибки здесь:
strSRV = "mysql01.gutknecht-net.com"
strDB = "gi_kunden"
sqlLogin = "TEST" 'has to be changed
sqlPW = "TEST_PW" 'has to be changed
strConn = "ODBC;DSN=" & strSRV & ";UID=" & sqlLogin & ";PWD=" & sqlPW & ";Database=gi_kunden"
With Sheets("Firma").ListObjects
sqlCommand = "Select * From tbl_firma"
.Add(SourceType:=0, Source:=strConn, LinkSource:=True, Destination:=ActiveWorkbook.Sheets("Firma").Range("A2")).QueryTable 'Get an error here
.CommandText = Array(sqlCommand)
End With
With Sheets("Person").ListObjects
sqlCommand = "Select * From tbl_person"
.Add(SourceType:=0, Source:=strConn, LinkSource:=True, Destination:=ActiveWorkbook.Sheets("Person").Range("A2")).QueryTable 'Get an error here
.CommandText = Array(sqlCommand)
End With
Также попробовал это со следующим кодом:
strConn = "Provider=SQLNCLI10;" & _
"Server=" & strSRV & ";" & _
"Database=" & strDB & ";" & _
"UID=" & sqlLogin & ";" & _
"PWD=" & sqlPW & ";"
но это все равно не сработало...
Если бы кто-нибудь мог помочь мне здесь, я был бы очень признателен. Если вам нужна дополнительная информация, просто скажите так:)
2 ответа
Я наконец получил это работающий.........:)
Я изменил код из кода VBA для извлечения данных из Mysql DB в Mac Excel 2011 и адаптировал его к следующему:
Sub SqlConnection()
Dim sqlstring As String
Dim connstring As String
Dim sLogin As String
sLogin = "Uid=$;Pwd=$;"
sqlstringfirma = "select * from gi_kunden.tbl_firma"
sqlstringperson = "select * from gi_kunden.tbl_person"
connstring = "ODBC;DSN=KundeDB;" & sLogin
ActiveWorkbook.Sheets("Firma").Select
ActiveSheet.Range("A1:T2000").Clear
Dim qt As QueryTable
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next qt
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringfirma)
.BackgroundQuery = False
.Refresh
End With
ActiveWorkbook.Sheets("Person").Select
ActiveSheet.Range("A1:T2000").Clear
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next qt
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringperson)
.BackgroundQuery = False
.Refresh
End With
End Sub
Кажется, это работает нормально.... После нескольких часов серфинга и поиска в Google ^^ (Аллилуйя!!)
Спасибо, в любом случае:)
Я наконец получил немного больше информации. Мне удалось получить данные через odbc из базы данных sql вручную, и вот код, который я получил от записи:
Sub GetFromSQL()
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$E$3"), , xlYes).Name = _
"Table1"
Range("Table1[#All]").Select
With ActiveSheet.QueryTables.Add(Destination:=Range("Table1[[#Headers],[ID]]" _
))
.PostText = "ExternalData_1"
.Name = True
.FieldNames = False
.RefreshStyle = xlOverwriteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.HasAutoFormat = False
.RefreshOnFileOpen = 1
.BackgroundQuery = False
.TablesOnlyFromHTML = True
.SaveData = True
.Refresh BackgroundQuery:=False
.UseListObject = True
End With
End Sub
Проблема в том, что я не могу перезапустить этот макрос, так как часть, где я подключаюсь к базе данных, а также запрос, здесь нигде не найдены.
У кого-нибудь есть подсказка, что мне нужно добавить в этот код, чтобы он работал?
Спасибо за вашу поддержку.
CU Kath