Подключение драйвера ODBC mySQL (источник данных не найден)

Узнай цену своей работы

Формулировка задачи:

При попытке подключения к драйверу через Excel (Данные -> источник внешних данных) получаю "В указанном DSN архитектура приложения не соответствует друг другу". Если через VBA, то ошибка "Источник данных не найден и не указан драйвер, используемый по-умолчанию". Вся информация о проведенных настройках на скриншотах. ОС: Windows 7 x64. MySQL 5.5 x32, user: root, pass: 333. Имя базы данных: testme. Query Browser подключается без ошибок. Драйвер mysql-connector-odbc-5.1.10-winx64. Что я упускаю?

Решение задачи: «Подключение драйвера ODBC mySQL (источник данных не найден)»

textual
Листинг программы
Option Explicit
Private Sub testADO()
  Const adUseClient = 3, adOpenKeyset = 1, adOpenDynamic = 2, adOpenStatic = 3, adLockOptimistic = 3
  
  Dim oConnect As Object, oRecordSet As Object
  Dim fld
  
  Set oConnect = CreateObject("ADODB.Connection")
  Set oRecordSet = CreateObject("ADODB.Recordset")
  oConnect.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=tst;USER=root;PASSWORD=1;"
  
  oRecordSet.CursorLocation = adUseClient
  
  oConnect.Execute "DROP TABLE IF EXISTS my_ado"
  oConnect.Execute "CREATE TABLE my_ado(id int not null auto_increment primary key," & _
                    "name  char(20)," & _
                    "dsc varchar(25)," & _
                    "txt text, dt date, tm time, ts timestamp) engine=myisam default character set=utf8"
 
  oConnect.Execute "INSERT INTO my_ado(id, name, dsc, txt, dt, tm, ts) values(null, 'Первое имя', 'Первое описание', 'Длинный текст, - такой, насколько не будет лениво стучать по клавишам',20120101, 1020, 201201011010)"
  oConnect.Execute "INSERT INTO my_ado(id, name, dsc, txt, dt, tm, ts) values(7, 'Второе имя id=7', 'Описание для второго', 'Длинный текст, - такой насколько не будет лениво стучать по клавишам',20120101, 1020, 201201011010)"
  oConnect.Execute "INSERT INTO my_ado values(null, 'Удалим', 'эту запись','т.е в окончательном наборе эта запись будет отсутствовать!!!!!!!!!!!!',20120102, 1030, 201201011020)"
  oConnect.Execute "INSERT INTO my_ado(dsc, name, txt, dt, tm, ts) values('последняя', 'На этот раз','запись, но после добавления переместится чуть выше',20120101, 1020, 201201011010)"
  
  oRecordSet.Open "SELECT * FROM my_ado", oConnect
  Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  oRecordSet.MoveFirst
  Debug.Print String(50, "-") & " Таблица, заполненная insert'ами " & String(50, "-")
  For Each fld In oRecordSet.fields
    Debug.Print fld.Name,
  Next
  Debug.Print
  
  Do Until oRecordSet.EOF
    For Each fld In oRecordSet.fields
      Debug.Print fld.Value,
    Next
    oRecordSet.MoveNext
    Debug.Print
  Loop
  oRecordSet.Close
  
  InputBox ("Это только для организации паузы" & vbNewLine & _
           "переключаемся на окно с mysql и вводим" & vbNewLine & _
           "insert into my_ado(id, name) values(3, 'Третья запись'")
  
  ' Обновление этой  записи в RecordSet
  oRecordSet.Open "SELECT * FROM my_ado", oConnect
  Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  oRecordSet.MoveFirst
  Debug.Print String(50, "-") & "После добавления сторонней записи из клиента MYSQL" & String(50, "-")
  For Each fld In oRecordSet.fields
    Debug.Print fld.Name,
  Next
  oRecordSet.Close
  
  Debug.Print
  Debug.Print String(50, "-") & "обновление записи добавленной сторонним приложением (добавлено в клиенте MYSQL)" & String(50, "-")
  
  oRecordSet.CursorLocation = adUseClient        'нужно для перемещения по данным
  oRecordSet.Open "SELECT * FROM my_ado", oConnect, adOpenDynamic, adLockOptimistic
  
  oRecordSet.Find "id=3"
  oRecordSet.fields("txt") = "В поле name - просто бред собачий"
  oRecordSet.Update
  Do Until oRecordSet.EOF
    For Each fld In oRecordSet.fields
      Debug.Print fld.Value,
    Next
    oRecordSet.MoveNext
    Debug.Print
  Loop
  oRecordSet.Close
  
  ' Заполнение через RecordSet
  oRecordSet.Open "select * from my_ado", oConnect, adOpenDynamic, adLockOptimistic
  oRecordSet.AddNew
  oRecordSet!Name = "Добавим в recorset"
  oRecordSet!txt = "Эта запись была добавлена в ранее полученный recordset, поле timestamp будет заполнено правильным значением"
  oRecordSet.Update
  oRecordSet.Close
 
  ' Обновление первой записи в RecordSet
  oRecordSet.Open "SELECT * FROM my_ado"
  oRecordSet!Name = "Этого не увидим"
  oRecordSet!txt = "Это просто так, будет заменен!!!"
  oRecordSet.Update
  oRecordSet.Close
  
  ' Обновление еще раз первой записи в RecordSet
  oRecordSet.Open "SELECT * FROM my_ado"
  oRecordSet!Name = "А увидим именно это"
  oRecordSet!txt = "Обновленный второй раз текст в этом поле - [txt]"
  oRecordSet.Update
  oRecordSet.Close
  
  ' Удаление записи в RecordSet
  oRecordSet.Open "SELECT * FROM my_ado"
  oRecordSet.MoveNext
  oRecordSet.MoveNext
  oRecordSet.Delete
  oRecordSet.Close
  
  oRecordSet.Open "SELECT * FROM my_ado", oConnect
  Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  oRecordSet.MoveFirst
  Debug.Print String(50, "-") & "Окончательная таблица после всех произведенных изменений " & String(50, "-")
  For Each fld In oRecordSet.fields
    Debug.Print fld.Name,
  Next
  Debug.Print
  
  Do Until oRecordSet.EOF
    For Each fld In oRecordSet.fields
      Debug.Print fld.Value,
    Next
    oRecordSet.MoveNext
    Debug.Print
  Loop
  oRecordSet.Close
  oConnect.Close
End Sub

Объяснение кода листинга программы

  1. Подключение к базе данных MySQL с использованием ODBC-драйвера
  2. Создание таблицы my_ado с несколькими полями
  3. Вставка нескольких записей в таблицу my_ado с использованием оператора INSERT INTO
  4. Выборка всех записей из таблицы my_ado и вывод их на экран
  5. Обновление записи в таблице my_ado с использованием оператора UPDATE
  6. Добавление новой записи в таблицу my_ado через объект RecordSet
  7. Обновление первой записи в таблице my_ado через объект RecordSet
  8. Удаление записи из таблицы my_ado через объект RecordSet
  9. Повторное выборка всех записей из таблицы my_ado и вывод их на экран
  10. Закрытие всех открытых объектов, включая соединение и объект RecordSet
  11. Вывод на экран окончательной таблицы my_ado после всех произведенных изменений

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5