VBA / MySQL проблема с использованием соединителя ODBC - PullRequest
4 голосов
/ 22 марта 2012

Я боролся с этим уже несколько дней. Любая помощь высоко ценится.

Попытка подключиться к базе данных MySQL с помощью Excel VBA на ПК со следующим:

Excel 2007 Windows 7 x64 Home Premium MySQL 5.5 MySQL ODBC Connector 5.1, 64 бит

В Excel VBA я ссылался на библиотеку Microsoft ActiveX Objects 2.8.

VBA, которую я использую для подключения:

Dim oConn As ADODB.Connection
Public Sub ConnectDB()
    Set oConn = New ADODB.Connection
    oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & "SERVER=localhost;" & "DATABASE=test;" & "USER=root;" & "PASSWORD=PWhere;" & "Option=3"
End Sub

Каждый раз, когда я запускаю это, я получаю диалоговое окно с ошибкой: «[Microsoft] [ODBC Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию»

Служба MySQL определенно работает.

Я использовал Администратор источника данных Windows, чтобы проверить, что MySQL ODBC Connector 5.1 присутствует и исправен: да, проверяется ОК, когда я пытаюсь создать DSN таким способом.

Просматривая параметры ссылок проекта VBA, я отмечаю варианты ссылок на целый ряд различных библиотек ADO, включая (многомерные) параметры и версии библиотек 2.0,2.1,2.5,2.6,2.7 и 6.0 - возможно, ответ лежит в одном из них?

Требуются дополнительные сведения, дайте мне знать.

Ответы [ 2 ]

4 голосов
/ 29 сентября 2012

Я получил похожее сообщение, когда перенес мое приложение в другую систему с другой версией драйвера - похоже, что имя драйвера с ошибкой вызывает идентичное сообщение. Чтобы найти правильное имя драйвера и сделать версию драйвера приложения независимой, я использую следующий код:

    Public Function Get_Driver() As String

    Const HKEY_LOCAL_MACHINE = &H80000002
    Dim l_Registry As Object
    Dim l_RegStr As Variant
    Dim l_RegArr As Variant
    Dim l_RegValue As Variant

    Get_Driver = ""
    Set l_Registry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    l_Registry.enumvalues HKEY_LOCAL_MACHINE, "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", l_RegStr, l_RegArr

    For Each l_RegValue In l_RegStr
        If InStr(1, l_RegValue, "MySQL ODBC", vbTextCompare) > 0 Then
            Get_Driver = l_RegValue
            Exit For
        End If
    Next
    Set l_Registry = Nothing
End Function
4 голосов
/ 22 марта 2012

Вам необходимо использовать 32- или 64-разрядную версию в зависимости от версии Excel , а не Windows. Поэтому, даже если вы используете 64-разрядную версию Windows 7, я считаю, что Excel 2007 поставляется только с 32-разрядной версией, поэтому вам нужно использовать 32-разрядный разъем mysql.

См. Также сообщение об ошибке , аналогичное вашей проблеме.

...