Подключение драйвера 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
Листинг программы
  1. Option Explicit
  2. Private Sub testADO()
  3.   Const adUseClient = 3, adOpenKeyset = 1, adOpenDynamic = 2, adOpenStatic = 3, adLockOptimistic = 3
  4.  
  5.   Dim oConnect As Object, oRecordSet As Object
  6.   Dim fld
  7.  
  8.   Set oConnect = CreateObject("ADODB.Connection")
  9.   Set oRecordSet = CreateObject("ADODB.Recordset")
  10.   oConnect.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=tst;USER=root;PASSWORD=1;"
  11.  
  12.   oRecordSet.CursorLocation = adUseClient
  13.  
  14.   oConnect.Execute "DROP TABLE IF EXISTS my_ado"
  15.   oConnect.Execute "CREATE TABLE my_ado(id int not null auto_increment primary key," & _
  16.                     "name  char(20)," & _
  17.                     "dsc varchar(25)," & _
  18.                     "txt text, dt date, tm time, ts timestamp) engine=myisam default character set=utf8"
  19.  
  20.   oConnect.Execute "INSERT INTO my_ado(id, name, dsc, txt, dt, tm, ts) values(null, 'Первое имя', 'Первое описание', 'Длинный текст, - такой, насколько не будет лениво стучать по клавишам',20120101, 1020, 201201011010)"
  21.   oConnect.Execute "INSERT INTO my_ado(id, name, dsc, txt, dt, tm, ts) values(7, 'Второе имя id=7', 'Описание для второго', 'Длинный текст, - такой насколько не будет лениво стучать по клавишам',20120101, 1020, 201201011010)"
  22.   oConnect.Execute "INSERT INTO my_ado values(null, 'Удалим', 'эту запись','т.е в окончательном наборе эта запись будет отсутствовать!!!!!!!!!!!!',20120102, 1030, 201201011020)"
  23.   oConnect.Execute "INSERT INTO my_ado(dsc, name, txt, dt, tm, ts) values('последняя', 'На этот раз','запись, но после добавления переместится чуть выше',20120101, 1020, 201201011010)"
  24.  
  25.   oRecordSet.Open "SELECT * FROM my_ado", oConnect
  26.   Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  27.   oRecordSet.MoveFirst
  28.   Debug.Print String(50, "-") & " Таблица, заполненная insert'ами " & String(50, "-")
  29.   For Each fld In oRecordSet.fields
  30.     Debug.Print fld.Name,
  31.   Next
  32.   Debug.Print
  33.  
  34.   Do Until oRecordSet.EOF
  35.     For Each fld In oRecordSet.fields
  36.       Debug.Print fld.Value,
  37.     Next
  38.     oRecordSet.MoveNext
  39.     Debug.Print
  40.   Loop
  41.   oRecordSet.Close
  42.  
  43.   InputBox ("Это только для организации паузы" & vbNewLine & _
  44.            "переключаемся на окно с mysql и вводим" & vbNewLine & _
  45.            "insert into my_ado(id, name) values(3, 'Третья запись'")
  46.  
  47.   ' Обновление этой  записи в RecordSet
  48.  oRecordSet.Open "SELECT * FROM my_ado", oConnect
  49.   Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  50.   oRecordSet.MoveFirst
  51.   Debug.Print String(50, "-") & "После добавления сторонней записи из клиента MYSQL" & String(50, "-")
  52.   For Each fld In oRecordSet.fields
  53.     Debug.Print fld.Name,
  54.   Next
  55.   oRecordSet.Close
  56.  
  57.   Debug.Print
  58.   Debug.Print String(50, "-") & "обновление записи добавленной сторонним приложением (добавлено в клиенте MYSQL)" & String(50, "-")
  59.  
  60.   oRecordSet.CursorLocation = adUseClient        'нужно для перемещения по данным
  61.  oRecordSet.Open "SELECT * FROM my_ado", oConnect, adOpenDynamic, adLockOptimistic
  62.  
  63.   oRecordSet.Find "id=3"
  64.   oRecordSet.fields("txt") = "В поле name - просто бред собачий"
  65.   oRecordSet.Update
  66.   Do Until oRecordSet.EOF
  67.     For Each fld In oRecordSet.fields
  68.       Debug.Print fld.Value,
  69.     Next
  70.     oRecordSet.MoveNext
  71.     Debug.Print
  72.   Loop
  73.   oRecordSet.Close
  74.  
  75.   ' Заполнение через RecordSet
  76.  oRecordSet.Open "select * from my_ado", oConnect, adOpenDynamic, adLockOptimistic
  77.   oRecordSet.AddNew
  78.   oRecordSet!Name = "Добавим в recorset"
  79.   oRecordSet!txt = "Эта запись была добавлена в ранее полученный recordset, поле timestamp будет заполнено правильным значением"
  80.   oRecordSet.Update
  81.   oRecordSet.Close
  82.  
  83.   ' Обновление первой записи в RecordSet
  84.  oRecordSet.Open "SELECT * FROM my_ado"
  85.   oRecordSet!Name = "Этого не увидим"
  86.   oRecordSet!txt = "Это просто так, будет заменен!!!"
  87.   oRecordSet.Update
  88.   oRecordSet.Close
  89.  
  90.   ' Обновление еще раз первой записи в RecordSet
  91.  oRecordSet.Open "SELECT * FROM my_ado"
  92.   oRecordSet!Name = "А увидим именно это"
  93.   oRecordSet!txt = "Обновленный второй раз текст в этом поле - [txt]"
  94.   oRecordSet.Update
  95.   oRecordSet.Close
  96.  
  97.   ' Удаление записи в RecordSet
  98.  oRecordSet.Open "SELECT * FROM my_ado"
  99.   oRecordSet.MoveNext
  100.   oRecordSet.MoveNext
  101.   oRecordSet.Delete
  102.   oRecordSet.Close
  103.  
  104.   oRecordSet.Open "SELECT * FROM my_ado", oConnect
  105.   Debug.Print "Всего записей в наборе - " & oRecordSet.RecordCount
  106.   oRecordSet.MoveFirst
  107.   Debug.Print String(50, "-") & "Окончательная таблица после всех произведенных изменений " & String(50, "-")
  108.   For Each fld In oRecordSet.fields
  109.     Debug.Print fld.Name,
  110.   Next
  111.   Debug.Print
  112.  
  113.   Do Until oRecordSet.EOF
  114.     For Each fld In oRecordSet.fields
  115.       Debug.Print fld.Value,
  116.     Next
  117.     oRecordSet.MoveNext
  118.     Debug.Print
  119.   Loop
  120.   oRecordSet.Close
  121.   oConnect.Close
  122. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут