Имя: Пароль:
1C
1С v8
Проблема выборки данных из внешнего источника с "_" в названиях полей [mySql, 1Cv8.2.18+]
0 SleepyFly
 
03.07.19
16:42
Коротко - есть баг от 2012-06-14 порд номером 10103123  (SW672486):
При обращении к полю внешнего источника данных MySQL, содержащему в имени знак подчеркивания, происходит ошибка - это поле обрамляется двойными кавычками и SQL запрос не проходит проверку синтаксиса. Этот баг появился после версии 8.2.14.519 и не исправлен до версии 8.3.13.1690 включительно (что с более позними не знаю)
Так вот - я нашел достаточно элегантное решение этой проблемы. Дело в том, что MySQL синтаксис позволяет интерпретировать двойные кавычки, как одинарную косую кавычку (которая и используется для обрамления имен полей и таблиц) при включенном режиме ANSI_QUOTES.
Чтобы использовать эту возможность - необходимо:
1. Создать системный MySQL ODBC DSN со всеми нужными данными для подключения.
2. В поле Initial Statement вписать запрос на установку нужного режима для сессии: SET SESSION SQL_MODE=ANSI_QUOTES;
3. Рекомендую установить галочку Allow Multiple Statements для возможности исполнения нескольких запросов за раз.
4. НЕ ИСПОЛЬЗОВАТЬ двойные кавычки в тексте запроса, заменить их одинарными при необходимости.
5. Для подключения к внешнему источнику я использую следующий код:
    ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
    ПараметрыСоединения.АутентификацияОС = Истина; //Без этой строки данные аутентификации DSN не учитываются
    ПараметрыСоединения.СтрокаСоединения = "DSN=" + ИмяВашегоDSN;
      ВнешниеИсточникиДанных.mysql.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
      ВнешниеИсточникиДанных.mysql.УстановитьСоединение();
    ...
    ВнешниеИсточникиДанных.mysql.РазорватьСоединение();

Надеюсь было полезно.
1 shuhard
 
03.07.19
18:42
(0)[Надеюсь было полезно.]
нет, от слова совсем
2 rsv
 
03.07.19
20:18
(0) ...что мешает юзать ADO и не подсаживаться на зависимость от движка 1с ?
3 Garykom
 
гуру
03.07.19
20:54
(2) Кто мешает написать обертку на чем угодно которое предоставляет для 1С http-сервис?
4 rsv
 
03.07.19
20:59
(3) опять что то ваять ... смысл. Адо в винде по умолчанию дрова поставить только для мускула
5 rsv
 
03.07.19
20:59
сервисы сервера обертки ....
6 Garykom
 
гуру
03.07.19
21:01
(4) Сервер не на винде уже давно не редкость или фреш.
К черту ado.
7 Garykom
 
гуру
03.07.19
21:02
Кто все еще использует ADO в 2019 году, просто не смог освоить ничего получше.
8 Garykom
 
гуру
03.07.19
21:04
9 rsv
 
03.07.19
21:04
(7) пописывать http сервисы и парясь мегапростыни Jason?
10 Garykom
 
гуру
03.07.19
21:05
(9) Не освоил? Там писать меньше чем с ADO, работает быстрее и удобнее.
Можно сразу в объекты 1С превращать.
11 rsv
 
03.07.19
21:07
(10)  так где ваять ? На стороне  мускула ?
12 Garykom
 
гуру
03.07.19
21:08
(11) На стороне 1С или на стороне сервиса, mysql не трогается.
13 rsv
 
03.07.19
21:08
(12) вот и я про то ... на стороне  того кто отдаёт
14 Garykom
 
гуру
03.07.19
21:09
(12)+ И если что достаточно просто сменить mysql на нечто иное ибо у нас есть прокладка в виде rest.
Не переписывая 1С часть.
15 Garykom
 
гуру
03.07.19
21:09
(13) Не обязательно, можно и в 1С.
16 rsv
 
03.07.19
21:10
(14) :) если есть желание городить огород по отдаче инфы от источника в виде прокладок ...это выбор .
17 rsv
 
03.07.19
21:11
А можно по простому и понадёжней . Доступ к табличкам и норм
18 rsv
 
03.07.19
21:12
Или в мускуле таблицы в виде... треугольника ?:)
19 Garykom
 
гуру
03.07.19
21:14
(17) Для меня ADO это не "просто и надежно" а deprecated
20 rsv
 
03.07.19
21:18
даже городя огород с прокладками в видео сервиса все равно придётся задействовать sql для дергания инфы из таблиц .... лучше уж сразу дергать из получателя без посредников
21 Garykom
 
гуру
03.07.19
21:27
(20) ADO по вашему не посредник?
22 rsv
 
03.07.19
21:35
(21) естественно это универсальный посредник для доступа к данным
23 rsv
 
03.07.19
21:39
Но без этих всех шаманств с жесонами хмелями вебсерверами :)
24 rsv
 
03.07.19
21:40
Как то было дело .работал работал сервис соап а потом
Закончилось банальщиной адо и табличками :)