Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
1

Код VBA для линковки (установлении связи) по двум или более драйверам ODBC

21.04.2017, 12:03. Показов 4591. Ответов 60
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Форумчане, дорого времени суток!
Есть код VBA, который производит линковку Аксесс 2003 с таблицами SQL (в данном случае MySQL). Используется драйвер ODBC для 32 разрядной ОС.

Есть компьютеры и с 64 разрядной ОС, для них ДРУГОЙ драйвер ODBC.
Прошу помочь составить код VBA, который мог бы связывать с таблицами использую драйвер или для 32 или для 64 разрядной ОС в зависимости от разрядности ОС конкретной машины..
Исходный кусочек кода прилагаю
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Public Sub LinkTablesMySQL_ADOX()
'Создание общей строки подключения и подлинковка таблиц MySQL
'--------------------------------------------------------------------------
Dim sDriver As String
Dim sServerAdr As String
Dim sCharset As String
Dim sServPort As String
Dim sDbName As String
Dim sUser As String
Dim sPassWord As String
Dim sConnect As String
Dim l&
'--------------------------------------------------------------------------
On Error GoTo LinkTablesMySQL_ADOX_Err
'Внимание - проверь версию драйвера! - Может уже... 5.5 или даже 6.2!?
    'sDriver = "{MySQL ODBC 5.2 ANSI Driver}"    'ANSI Driver
    sDriver = "{MySQL ODBC 3.51 Driver}"  'UNICODE Driver
    
    'sServerAdr = "localhost"
    sServerAdr = "111.111.1.111"   ' Адрес (Имя) сервера
    sServPort = "3306"         ' Порт соединения = 3306 (Обычно так и есть)
    sDbName = "base" ' Название базы
    sUser = "sistema"             ' Имя пользователя
    sPassWord = "999999"    ' Пароль
 
 
'Создаю строку подключения:
 sConnect = "ODBC;DRIVER=" & sDriver & _
        ";SERVER=" & sServerAdr & _
        ";Port=" & sServPort & _
        ";DATABASE=" & sDbName & _
        ";USER=" & sUser & _
        ";PASSWORD=" & sPassWord & _
        ";OPTION=3" & _
        ";stmt=set names cp1251"
        'Debug.Print sConnect
 
'--------------------------------------------------------------------
'Подключаем несколько таблиц по ADOX
        
l = LinkTable_ADOX("Afigenno", sConnect)
    If l > 0 Then Err.Raise l


Добавлено через 29 минут
Драйвер ODBC для 64 разрядной ОС для простоты назовем "Драйвер_64_ОС"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2017, 12:03
Ответы с готовыми решениями:

Код html или php для формы обратной связи
форма обратной связи!! подскажите плиз код html или php для формы обратной связи в моём случае ...

Как соединиться из VBA с Interbase через ADO или ODBC?
Подскажите плз как соединиться из VBA с Interbase через ADO или ODBC. Может еще варианты есть?

Сложение в столбце по двум или более условиям
Есть три столбца с цифрами, допустим А, C, E, нужно сложить все цифры столбца А, но только при...

Как происходит авторизация при установлении связи с сайтом?
Мне ранее не доводилось делать авторизацию на сайте - может быть, по этой причине и непонимание. ...

60
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.04.2017, 12:45 2
С помощью условной компиляции
Visual Basic
1
2
3
4
5
#If Win64 then
   Const sDriver = "Строка Драйвер_64_ОС"
#else
   Const sDriver = "Строка Драйвер_32_ОС"
#end if
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 12:32  [ТС] 3
mobile, Этот код нужно вставить в модуль-
Цитата Сообщение от ankan Посмотреть сообщение
Исходный кусочек кода прилагаю
Кликните здесь для просмотра всего текста
см. пост 21.04.2017, 14:03 ? Да ?
Можно подробнее?
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 13:14 4
ankan, для версии 3.51 не нашел 64-битного драйвера в https://www.connectionstrings.com/mysql/. Теперь не уверен, что такой вообще существует. Для более новых версий есть.

Насколько я знаю в connectionstrings.com самое полное и актуальное собрание драйверов. Где еще искать не знаю. Может быть на официальном сайте мускула?
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 13:32  [ТС] 5
mobile, Для 64 разрядной ОС есть драйверы, найти их не проблема.
Вопрос в другом- как составить код который может использовать несколько драйверов (повторюсь, их найти не проблема)
Код, использующий один драйвер есть в первом посте.
Как в него вставить дополнение, для использования нескольких драйверов?
Вы написали
Visual Basic
1
2
3
If Win64 then Const sDriver = "Строка Драйвер_64_ОС" 
else Const sDriver = "Строка Драйвер_32_ОС" 
end if
В какое место модуля вставить этот код?

Добавлено через 2 минуты
например, есть (mysql-connector-odbc-5.3.7-winx64.msi)
https://dev.mysql.com/downloads/connector/odbc/

Добавлено через 1 минуту
есть и для 32 разрядной ОС (mysql-connector-odbc-5.3.7-win32.msi)
https://dev.mysql.com/downloads/connector/odbc/, но он требует установки доп программ. Доп программы не на все компы легко устанавливаются.

Добавлено через 1 минуту
Поэтому в строках кода
Visual Basic
1
2
3
If Win64 then Const sDriver = "Строка Драйвер_64_ОС" 
else Const sDriver = "Строка Драйвер_32_ОС" 
end if
нужно , минимум три драйвера, два -для 32 разр. ОС , 1 -для 64 разрядной ОС.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 15:49 6
Цитата Сообщение от ankan Посмотреть сообщение
нужно , минимум три драйвера, два -для 32 разр. ОС , 1 -для 64 разрядной ОС.
ankan, вставлять надо прямо в процедуру конекшена
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub LinkTablesMySQL_ADOX()
................................
Dim vers
#If Win64 then
   vers=64
#else
   vers=32
 #end if
 
If vers=64 then
   sDriver = "Строка Драйвер_64_ОС" 
ElseIf <Условие> Then
   sDriver = "Строка Драйвер_32_ОС Версия 1"
Else
   sDriver = "Строка Драйвер_32_ОС Версия 2" 
End if
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 16:09  [ТС] 7
mobile, заругался на
Цитата Сообщение от mobile Посмотреть сообщение
ElseIf <Условие> Then
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 16:13 8
ankan, покажите строку с ошибкой. И имейте в виду, что угловые скобки не являются частью синтаксиса. Поставлены только чтобы как-то оттенить условие.
0
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 16:22  [ТС] 9
mobile, Прикладываю скрин
Миниатюры
Код VBA для линковки (установлении связи) по двум или более драйверам ODBC  
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 16:36 10
ankan, ну откуда же я знаю в каком случае нужна строка с 3.51 драйвером, а в каком 5.3.7 ? Это условие должны задать Вы сами. Каким оно будет не знаю.

Добавлено через 1 минуту
Вместо <Условие> надо написать настоящее условие, то которое влияет на выбор драйвера
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 17:01  [ТС] 11
mobile, Драйвер ODBC, устанавливается на компьютер (обычно) в директорию
C:\Program Files\MySQL
и в этой папке может находится:
Connector ODBC 5.3
или
Connector ODBC 3.51
или другой

т.е вместо <Условие> нужно написать
"C:\Program Files\MySQL\Connector ODBC 3.51"

Так?

Добавлено через 18 минут
т.е должно учитываться 2 критерия
1. разрядность ОС
2. Какая папка (имя папки) лежит в директории C:\Program Files\MySQL

может так:
Visual Basic
1
2
3
4
5
6
7
If vers = 64 And "C:\Program Files\MySQL\Connector ODBC 5.3" Then
sDriver = "mysql-connector-odbc-5.3.7-winx64.msi" 
ElseIf  vers = 32 And "C:\Program Files\MySQL\Connector ODBC 3.51" Then
sDriver = "mysql odbc 3.51 Driver" 
If vers = 32 And "C:\Program Files\MySQL\Connector ODBC 5.3" Then
sDriver = "mysql-connector-odbc-5.3.7-winx32.msi" 
End If
......
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 17:01 12
Надо проверить есть ли файл или папка с определенным названием?
Проверка на папку
Visual Basic
1
2
3
4
5
6
7
8
9
10
If vers=64 then
   sDriver = "Строка Драйвер_64_ОС" 
ElseIf Dir("C:\Program Files\MySQL\Connector ODBC 3.51", vbdirectiry)<>"" Then
   sDriver = "Строка Драйвер_32_ОС Версия 1" 'Папка Connector ODBC 3.51 существует
ElseIf Dir("C:\Program Files\MySQL\Connector ODBC 5.3", vbdirectiry)<>"" Then 
   sDriver = "Строка Драйвер_32_ОС Версия 2" 'Папка Connector ODBC 5.3 существует 
Else
   msgbox "нет драйвера MySQL"
   Exit Sub
End if
0
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 17:26  [ТС] 13
mobile, ругается, "нет драйвера MySQL"
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 17:36 14
Извиняюсь, неправильно написал имя константы, надо vbdirectory или числом 16
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 18:00  [ТС] 15
mobile, ПО mysql odbc 3.51 Driver", подключился.
По другим двум драйверам:
"mysql-connector-odbc-5.3.7-winx64.msi"
"mysql-connector-odbc-5.3.7-winx32.msi"

пока не подключился "Ошибка ODBC"
,буду далее тестировать.
0
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 18:03  [ТС] 16
mobile,
Миниатюры
Код VBA для линковки (установлении связи) по двум или более драйверам ODBC  
0
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 20:50  [ТС] 17
проверил работу драйверов ODBC
"mysql-connector-odbc-5.3.7-winx64.msi"
"mysql-connector-odbc-5.3.7-winx32.msi"
по отдельности (не в составе кода,предложенного mobile, а исходного-см. первый пост данной темы
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
--------------------------------------------------------------------------
On Error GoTo LinkTablesMySQL_ADOX_Err
'Внимание - проверь версию драйвера! - Может уже... 5.5 или даже 6.2!?
    'sDriver = "{MySQL ODBC 5.2 ANSI Driver}"    'ANSI Driver
    sDriver = "{MySQL ODBC 3.51 Driver}"  'UNICODE Driver
    
    'sServerAdr = "localhost"
    sServerAdr = "111.111.1.111"   ' Адрес (Имя) сервера
    sServPort = "3306"         ' Порт соединения = 3306 (Обычно так и есть)
    sDbName = "base" ' Название базы
    sUser = "sistema"             ' Имя пользователя
    sPassWord = "999999"    ' Пароль

т.е. при использовании "mysql-connector-odbc-5.3.7-winx32.msi"
код выглядит как:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
--------------------------------------------------------------------------
On Error GoTo LinkTablesMySQL_ADOX_Err
'Внимание - проверь версию драйвера! - Может уже... 5.5 или даже 6.2!?
    'sDriver = "{MySQL ODBC 5.2 ANSI Driver}"    'ANSI Driver
    sDriver = "[B]mysql-connector-odbc-5.3.7-winx32.msi[/B]"  'UNICODE Driver
    
    'sServerAdr = "localhost"
    sServerAdr = "111.111.1.111"   ' Адрес (Имя) сервера
    sServPort = "3306"         ' Порт соединения = 3306 (Обычно так и есть)
    sDbName = "base" ' Название базы
    sUser = "sistema"             ' Имя пользователя
    sPassWord = "999999"    ' Пароль

НЕ работает т.е проблема не в коде mobile, а в чем-то другом.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
24.04.2017, 20:59 18
ankan, файлы с расширением *.msi не могут быть драйвером по-моему. *.msi это установочный, инсталяционный пакет для Windows. Его надо запустить и только тогда появится драйвер в какой-то папке.
1
45 / 30 / 1
Регистрация: 28.09.2012
Сообщений: 972
24.04.2017, 21:02  [ТС] 19
т.е имя Драйвера, на самом деле, может быть другим? У меня то же эта мысль проскальзывала. Надо поискать правильное имя.
0
10469 / 5455 / 1375
Регистрация: 05.10.2016
Сообщений: 15,454
25.04.2017, 11:32 20
Цитата Сообщение от ankan Посмотреть сообщение
Надо поискать правильное имя.
Так и указывайте, типа:
Visual Basic
1
sDriver = "{MySQL ODBC 3.51 Driver}"
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
If vers=64 then
   sDriver = "Строка Драйвер_64_ОС" 
ElseIf Dir("C:\Program Files\MySQL\Connector ODBC 3.51", vbdirectiry)<>"" Then
   'sDriver = "Строка Драйвер_32_ОС Версия 1" 'Папка Connector ODBC 3.51 существует
   sDriver = "{MySQL ODBC 3.51 Driver}"
ElseIf Dir("C:\Program Files\MySQL\Connector ODBC 5.3", vbdirectiry)<>"" Then 
   'sDriver = "Строка Драйвер_32_ОС Версия 2" 'Папка Connector ODBC 5.3 существует 
   sDriver = "{MySQL ODBC 5.3 Unicode Driver}"
Else
   msgbox "нет драйвера MySQL"
   Exit Sub
End if
Achtung!
Разрядность MySQL ODBC драйвера - должна совпадать с разрядностью MSO (а не СИСТЕМЫ).
Т.Е. Если система x64,а MSO=x32 (что довольно обычно), то - ставим драйвер - x32.
1
25.04.2017, 11:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2017, 11:32
Помогаю со студенческими работами здесь

Регулярка по двум буквам подряд, но не трем или более
Не могу создать регулярку которая найдет только двойные буквы wworld - 1 worrld - 1 worldd - 1...

Поиск по определенному или двум и более параметрам в List.Find
Есть структура public struct Note { //из списка группы public string...

OLE BD или ODBC для MS Access?
Что лучше использоваться для подключения к базе access?

Написать код для решение по двум формулам

Что быстрее: макрос или код VBA ?
Имеется ввиду макросы в MS Access. Нужна конкретная информация по сабжу.

Код VBA можно упростить или нет?
Уважаемые господа! Подскажите пожалуйста можно ли упростить вот этот код VBA. Если да то как? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru