Подключение драйвера 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
Объяснение кода листинга программы
- Подключение к базе данных MySQL с использованием ODBC-драйвера
- Создание таблицы
my_ado
с несколькими полями - Вставка нескольких записей в таблицу
my_ado
с использованием оператора INSERT INTO - Выборка всех записей из таблицы
my_ado
и вывод их на экран - Обновление записи в таблице
my_ado
с использованием оператора UPDATE - Добавление новой записи в таблицу
my_ado
через объект RecordSet - Обновление первой записи в таблице
my_ado
через объект RecordSet - Удаление записи из таблицы
my_ado
через объект RecordSet - Повторное выборка всех записей из таблицы
my_ado
и вывод их на экран - Закрытие всех открытых объектов, включая соединение и объект RecordSet
- Вывод на экран окончательной таблицы
my_ado
после всех произведенных изменений
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д