gifts2017

MySQL ODBC Driver 5.2 для "Внешнего источника данных" 1С8.3

Опубликовал Евгений Стоянов (quick) в раздел Администрирование - Сервисные утилиты

Решает проблему при использовании в запросах имен с нижним подчеркиванием при подключении Внешнего источника данных в 1С 8.3

Описание

При выполнении запроса к MySQL в 1С 8.3 столкнулся с проблемой преобразования запросов такого вида.

SELECT p.id_prod FROM product

1С преобразует этот запрос к виду

SELECT p."id_prod" FROM product

Это вызывает ошибку синтаксиса и запрос не выполняется.
Я немного модифицировал ODBC драйвер, который преобразует запрос полученный от 1С к виду

SELECT p.`id_prod` FROM product

Это позволяет полноценно использовать Внешние источники для работы с MySQL.
Для подключения использовать строку вида

Установка

Распаковать архив и запустиь install.bat.
Проверить что драйвер успешно установился можно командой

bin\myodbc-installer.exe -d -l

он отобразит нечто такое

C:\Program Files (x86)\MySQL_Connector_ODBC\bin>myodbc-installer -d -l
SQL Server
Microsoft ODBC for Oracle
Microsoft Access Driver (*.mdb)
Microsoft Access-Treiber (*.mdb)
Driver do Microsoft Access (*.mdb)
Microsoft dBase Driver (*.dbf)
Microsoft dBase-Treiber (*.dbf)
Driver do Microsoft dBase (*.dbf)
Microsoft Excel Driver (*.xls)
Microsoft Excel-Treiber (*.xls)
Driver do Microsoft Excel(*.xls)
Microsoft Paradox Driver (*.db )
Microsoft Paradox-Treiber (*.db )
Driver do Microsoft Paradox (*.db )
Microsoft Text Driver (*.txt; *.csv)
Microsoft Text-Treiber (*.txt; *.csv)
Driver da Microsoft para arquivos texto (*.txt; *.csv)
Microsoft Visual FoxPro Driver
Microsoft FoxPro VFP Driver (*.dbf)
Microsoft dBase VFP Driver (*.dbf)
Microsoft Visual FoxPro-Treiber
Driver para o Microsoft Visual FoxPro
SQL Server Native Client 11.0
MySQL ODBC 5.2(w) Driver

Использование

При подключении к источнику необходимо использовать строку следующего вида.

DRIVER={MySQL ODBC 5.2(w) Driver};SERVER=127.0.0.1;DATABASE=testbase;UID=admin;PWD=admin;"

Примечание

Тестировалось на Win7 x64 и Win7 x64. Драйвер собран под платформу x32 поэтому должен нормально работать и под другими версиями ОС.

Скачать файлы

Наименование Файл Версия Размер
mysql-connector-odbc-noinstall-5.2.4-.zip 117
.zip 7,71Mb
06.03.13
117
.zip 7,71Mb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Юрий Осипов (yuraos) 06.03.13 14:24
ЭХ!
ЛЮБЛЮ Я ЗАПИСЫВАТЬ ПЕРВЫЕ КОММЕНТАРИИ К СТАТЬЯМ!!!

А ПОЧЕМУ ???
----------------------------------------------------
А ПОТОМУ, ЧТО:
1) Можно смайлов в комментарий навставлять.
2) В сообщения рассылаемых сайтом по почте говорится, что Я АВТОР ПУБЛИКАЦИИ.

----------------------------------------------------
а вот изменять первый пост со смайлами не советую - смайлики пропадють.
----------------------------------------------------
:D :D :D :D :D :D :D
8-) 8-) 8-) 8-) 8-) 8-) 8-)
artbear; bulpi; +2 Ответить 1
2. Юрий Осипов (yuraos) 06.03.13 14:41
Так это косяк функционала внешних источников 1С
или ODBC драйвера?

А если попробывать работать напрямую через ADO,
а в СКД данные запихивать через набор данных объект в виде таблицы значений ???

Есть подсистемка для работы из 1С с COM-объектами и в частности с ADO.

Было б интересно узнать как она работает с MySQL.
Запросы к нему можно выполнять прямо из консоли в составе подсистемы.
3. Misha ⁠ (Magister) 06.03.13 15:04
(1) Что, правда? :)
(2) 1С "официально" поддерживает MsSQL, Postgres, DB2, Oracle. Всё остальное - "прочие", и никто не обещает что будет работать.
Вон с Firebird приколы жесткие есть - она не понимает SELECT TOP 10, ей надо SELECT FIRST 10 ну или лучше в конце диапазон с-по указывать. Из-за чего динамический список не работает - пришлось патчить драйвер ODBC.
5. Евгений Стоянов (quick) 06.03.13 15:14
(2) yuraos,
Можно еще десятью способами подключаться. Тут смысл был в создании внешнего источника как обьекта метаданных.
Это не косяк ODBC драйвера, это косяк транслирования запроса 1С-кой. Просто mysql не поддерживает синтаксис который она ему навязывает.
6. Никита Коротаев (bforce) 06.03.13 16:13
Да, проблема актуальная. В свое время побороли ее через создание вьюх на стороне MySQL.
С их помощью удалось не только вычистить все подчеркивания из полей таблицы, но и привести имена колонок в "человечий" русский вид (назвали колонки русскими буквами), что MySQL благополучно проглотил...

За старание, конечно, отдельный плюс.
7. Юрий Осипов (yuraos) 06.03.13 16:57
(5) quick,
так получается, что
автор работы идет по пути наименьшего для него сопротивления
и для исправления 1С-ных косяков
подламывает драйвер ODBC ???
8. Юрий Осипов (yuraos) 06.03.13 16:58
(7)
остальные приложения хоть будут после этого нормально работать через это драйвер???
9. Юрий Осипов (yuraos) 06.03.13 17:01
(4) Trotter_NN,
в смысле - как заставить 1С-7.7 работать нормально под Win > XP ???
10. Юрий Осипов (yuraos) 06.03.13 17:07
(9)
если проблемма в этом ...
... набираем в строке поиска по сайту слово "секретный"
и первое что в списке предлагаемых ссылок:

Секретный релиз платформы v77.27.1

решение с минимальными извратами.
11. Евгений Стоянов (quick) 06.03.13 17:42
(8) yuraos, остальные приложения не делают таких ужасов в запросах
miroha; yuraos; +2 Ответить
12. Евгений Стоянов (quick) 06.03.13 17:43
(7) yuraos, :)) посмешил.. но получается что все так и есть. То ли еще будет когда за линукс плотно возьмемся...
13. Юрий Осипов (yuraos) 06.03.13 18:03
(12)

- Урра! Мы научились вырезать гланды!!!
- Фуууу!
- Через **** !!!
- УУУУУ!

Народный мудрость

Селяви, то есть особенности национальной жизни.
:)
14. Юрий Осипов (yuraos) 06.03.13 18:20
quick,
а слабо написать ODBC драйвер для файловой 1с-ной базы ???
Герман
тебя бы расцеловал бы...
...а может даже бы озолотил.
15. Владимир (hogik) 07.03.13 01:29
(14)
"а слабо написать ODBC драйвер для файловой 1с-ной базы ??? "(с)
Юрий (yuraos).
Логичнее её заменить на другую сУБД у которой уже есть ODBC драйвер.
И много чего ещё - есть... ;-)
P.S.
А написать ODBC драйвер для файловой версии БД 1С-а сначала потребует написать SQL-ную СУБД для не полностью изученного формата хранения и способов обработки информации. И уже после этого можно будет приступить к написанию ODBC драйвера... ;-)
16. Юрий Осипов (yuraos) 07.03.13 18:54
(15) hogik,
отпиши это БОРЕ НУРРАЛИЕВУ.
он ТЕБЯ ТО ТОЧНО послушается!!!
:)
17. Владимир (hogik) 07.03.13 20:46
(16)
Юрий (yuraos).
Думаю, будет достаточно, если Вы меня послушаетесь.
И поймете всю глупость Вашей идеи/вопроса про написание ODBC драйвера для файловой версии 1С-а.
P.S.
В (15) сообщении была попытка объяснить Вам это вежливо. Извините...
18. Юрий Осипов (yuraos) 08.03.13 07:23
(17) Владимир(hogik), как говорится, извинения принимаются.
:)
правда эта глупость довольно распространенная.
Например andrewks эту идею глупостью не считает,
дословно цитирую:
"задачка нетривиальная. основная проблема - нехватка времени. поэтому на чистом альтруизме поднять это вряд ли получится".
Сам он правда пошел другим путем, как раз что-то вроде альтернативной СУБД для прямого доступа к файловой базе сделал.
---
ЗЫ:
да и вы, как я посмотрю, в молодости тоже баловались прямыми запросами в 1С-7.7
;)
19. Владимир (hogik) 08.03.13 14:56
(18)
"... в молодости тоже баловались прямыми запросами в 1С-7.7"(с)
Юрий (yuraos).
Я никогда ими не "баловался".
Данная поделка сделана, исключительно, по просьбам трудящихся. ;-)
Моё мнение по "проблеме" файловой версии 1С-а выражено в:
http://infostart.ru/public/15211/
http://infostart.ru/public/14664/
Чего и надо, по моему мнению, делать для файловой версии 1С 8.х.
Что касается мнения о "нетривиальности задачки", то это слабо сказано. :-)
Нормально она не реализуема без "вскрытия" родного 1С интерфейса к движку БД.
А если еще учесть, что этот интерфейс не является SQL-подобным, то и идея писать ODBC драйвер становится совсем "глупостью".
20. Юрий Осипов (yuraos) 11.03.13 14:43
(19) hogik,
Эх эти трудящиеся-трудящиеся !
Они такие нудные !!
Все время требуют сделать для них какую-нибудь "глупость" !!!
;)
ZLENKO; quick; +2 1 Ответить 1
21. Евгений Стоянов (quick) 11.03.13 15:16
(19) Никак не вразумею.. нафига что то делать для файловой 1С8?
Я всегда полагал что когда начинаются проблемы с файловой версией, то нужно переходить на SQL вариант.
22. Владимир (hogik) 11.03.13 15:40
(21)
"нафига что то делать для файловой 1С8"(с)
Евгений (quick).
Согласен с Вами. О чем и пишу выше по теме.
Надо делать не "для"(с), а вместо файловой.
Т.к. задумка концепции 1С-продукта плохо укладывается в РМ с "запросным" ЯМД.
И 1С-разработчикам пришлось делать переходник в лице т.н. сервера приложений.
При использовании более подходящей сУБД можно обойтись без "переходника".
И устранить основные недостатки файловых СУБД. И получить более дешёвую и простую в эксплуатации систему. Именно на замену файловой версии в случае "когда начинаются проблемы"(с). Т.е. промежуточный вариант между родной файловой и клиент-серверной версией. Т.к. большому количеству пользователей 1С-продукта вполне хватило бы варианта надежной работы системы на 10-50 пользователей.
23. Владимир (hogik) 11.03.13 17:24
(20)
Юрий (yuraos).
Чувствую Вас сильно задело слово "глупость".
Попробуйте читать в моих сообщения не только это слово. :-)
И расскажите нам КТО и ГДЕ будет выполнять SQL запрос в ODBC для файловой версии 1С-а? И как можно обойтись без написания "альтернативной СУБД для прямого доступа к файловой базе"(с) которую делает andrewks при, допустим, написания этого самого ODBC драйвера?
24. Victor (V_K) 27.03.13 16:19
На XP не хочет устанавливаться.
25. Георгий Коваленко (BATCOH) 18.06.13 17:03
Здравствуйте!
Винсервер 2008R2 x64, сервер 1С 8.3.3.641, тоже x64.
Драйвер успешно устанавливается, виден через myodbc-installer -d -l и через 32-битный odbcad32.exe.
А вот 1С его в упор не замечает. Как и вообще все 32-битные ODBC-драйверы (проверял на обычном MySQL ODBC драйвере).
Есть ли возможность собрать версию под x64?
26. Вадим Миляев (PrinzOfMunchen) 29.06.13 20:29
Даа..))) А я просто писал обработку, которая создает sql-скрипт, создающий вьюшки без нижнего подчеркивания, в "верблюжей" нотации. А как можно подключиться в Linux? Через какие драйвера? и возможно ли вообще?
27. Станислав Рево (ReSY) 05.03.14 16:24
Спасибо за разработку
Присоединяюсь к Ватсону, есть ли возможность реализации драйвера под версию x64, или настройки текущего под x64? Либо описание каким образом выполнялось изменение драйвера ODBC.
Текущая версия платформы 8.3.4.408, версия Connector ODBC MySQL 5.2.6.
28. Vlad (KillHunter) 05.03.14 16:35
Интересная разработка, а товарищ (27) ReSY, есть ли возможность реализации драйвера под версию x64, или настройки текущего под x64? Либо описание каким образом выполнялось изменение драйвера ODBC. тоже интересует этот вопрос ?
29. script Мальчинко (script) 18.06.14 18:41
Пожалуйста соберите под Win7 x64. Очень нужно.

При выполнении bin\myodbc-installer.exe -d -l
есть куча драйверов а MySQL ODBC 5.2(w) Driver - нету. Помогите спасите.
Пожет я что то не правильно делаю? У кого нибудь работает ?
30. script Мальчинко (script) 18.06.14 19:13
Что самое интересное дя этих манипуляций я удалил оригинальные драйвера на 32 и 64. Когда я понял что этот не устанавливается - поставил обратно оригинальный на 64 (mysql-connector-odbc-5.3.2-winx64) но 1С его не увидела, а 32 (mysql-connector-odbc-5.3.2-win32) 1С съела без проблем. Наверное от 1С тоже зависит 32 разрадная или 64 ??? Кто то знает правильный ответ?

Если у меня 1С приняля оригинальный 32-разрядный драйвер, тогда и этот должен былу становится и подхватиться. Значит проблема не в том что у меня винда 64-ая. Тогда в чем?
31. script Мальчинко (script) 18.06.14 19:20
Вобщем сдела копию таблицы на MySQL. Переименовал колонки с нижним подчеркиванием. Избавился от подчеркивания. Пересоздал источник в 1С - При открытии из формы - ошибка таже.
Но тем не менее такой код работает:
Объект = ВнешниеИсточникиДанных.site.Таблицы.tovari.СоздатьОбъект();
Объект.id = "99";
Объект.skuid = "88";
Объект.hash = Null;
Объект.ip = Null;
Объект.count = 3;
Объект.price = 40;
Объект.Записать();
32. script Мальчинко (script) 18.06.14 20:28
Если с чтением еще можно решить что то создавая Представления для таблиц на MySQL. То с записью во внешние источники беда. Через представления запись не работает, а на прямую мешает ошибка нижнего подчеркивания. Обложили.
33. Ярослав Соколов (YaroslavS) 15.08.14 17:35
У меня тоже под windows 2007 server x64 Драйвер этот 1С не видит. Хотя устанавливается вроде корректно и в списке драйверов отображается.
34. Andrei (baza1978) 10.10.14 11:55
на x64 надо поставить полноценный MSI потом подменить дрова на дрова автора из папочки lib. Только вот проблемы это не решает. Как не работали запросы к полям с подчеркиванием, так и не работают. Зря только копеечку потратил.
35. Корвин Авалонcкий (cocon2003) 23.01.15 12:49
Убило примечание: тестировалось на 2-х совершенно одинаковых системах Win7 x64? Зачем? А собрано под x32? Жесть :-)
37. Евгений Стоянов (quick) 05.05.16 14:15
В общем давно я на инфостарт не заглядывал. За это время много чего изменилось в моих проектах. Например я отказался от прямого доступа к внешним базам, т.к. ОС меняются, версии MySQL обновляются, сервера постоянно переезжают... и все превращается в непрерывный кошмар. Да и тянуть данные приходится не из одной базы а сразу с четырех расположенных на разных серверах, иногда в нескольких потоках. Поэтому последнее время перешел на написание веб сервисов на python + spyne.io и размещении их возле нужной внешней системы (mysql, postgresql, redis), а в 1С использую встроенные механизмы работы soap. Несмотря на первоначальную "сложность", в поддержке эта связка оказалась удобней, т.к. к ней же вяжется веб интерфейс и 1С 7.7.
Да и к 1С 7.7 уже написал парсер sql запросов с разбором md файла. https://github.com/WorldException/v7py если кому интересно
Если время будет как нибудь опубликую готовый набор для быстрого старта...
38. vitek1 vitek1 (vitek1) 31.05.16 10:22
столкнулись с аналогичной проблемой - кавычки в запросе и специфичный синтаксис SQL (select first) для СУБД Informix. Можете рассказать про технологию модификации ODBC драйвера? Как можно повторить это на своем драйвере?
39. Евгений Стоянов (quick) 31.05.16 14:02
(38) vitek1, качаете исходники odbc драйвера, немного правите раздел где обрабатывается приходящий текст запроса и компилируете.
Но как уже говорил, лучше сделать промежуточный веб сервис с готовой выборкой на каком нибудь нормальном языке, если конечно у вас не разработка на "отдал и забыл".
40. vitek1 vitek1 (vitek1) 01.06.16 10:21
(39) насколько понимаю, поскольку informix коммерческий продукт, то исходников драйвера нет, в отличие от MySQL?
с веб сервисом - сама идея не очень подходит. На 1С придется реализовывать очень много бизнес-логики по работе с базой. Писать для этого отдельные веб-сервисы не хочется. Да и лишаться возможности работы с базой с помощью стандартных упр. форм с встроенными функциями поиска и отборов не хочется. В этом вся и идея есть.