Подключение драйвера 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
после всех произведенных изменений
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д