![]() |
|
Формирование запроса в mySQL, из 1С не работает, а в консоли phpMyAdmin работает | ☑ | ||
---|---|---|---|---|
0
PQT
12.04.18
✎
06:08
|
ОписаниеОшибки():
Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 5.1 Driver][mysqld-5.5.52-38.3]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `repairs_statuses` SET `id` = "ccceac7b-3de4-11e8-8131-94de80bc398' at line 1 Причем формировании запроса двумя способами, эффект один: с 1С не работает, в консоле работает. Вариант запроса 1: INSERT INTO `repairs_statuses` SET `id` = "ccceac7b-3de4-11e8-8131-94de80bc398d", `number` = "CМ0000593", `date` = "12.04.2018 10:35:28", `fault` = "перегревается, шуметь начинает, выключает сам, или сильнее шумит. без пароля", `fio` = "Вербило Ольга Николаевна"; INSERT INTO `repairs_statuses` SET `id` = "ccceac7e-3de4-11e8-8131-94de80bc398d", `number` = "CМ0000594", `date` = "12.04.2018 10:40:04", `fault` = "посмотреть батарею под заказ. без пароля. сильно шумит кулер. диагностика HDD, почистить ОС или переустановка", `fio` = "Козырев Сергей Георгиевич"; Вариант запроса 2: INSERT INTO `repairs_statuses`(`id`,`number`,`date`,`fault`,`fio`) VALUES ("ccceac7b-3de4-11e8-8131-94de80bc398d","CМ0000593","12.04.2018 10:35:28","перегревается, шуметь начинает, выключает сам, или сильнее шумит. без пароля","Вербило Ольга Николаевна"); INSERT INTO `repairs_statuses`(`id`,`number`,`date`,`fault`,`fio`) VALUES ("ccceac7e-3de4-11e8-8131-94de80bc398d","CМ0000594","12.04.2018 10:40:04","посмотреть батарею под заказ. без пароля. сильно шумит кулер. диагностика HDD, почистить ОС и ли переустановка, как мастер посчитает нужным. данные сохранить","Козырев Сергей Георгиевич"); Для проверки запросы копировал напрямую из отладчика в phpMyAdmin. Исполнение запускал тоже двумя способами: ActiveSQL.Open(Стр) и mySQL.Execute(Стр), - эффект один |
|||
1
PQT
12.04.18
✎
06:10
|
Через ODBC не пробовал, если не получится победить, придется
|
|||
2
Туц
12.04.18
✎
06:11
|
(0) "ccceac7b-3de4-11e8-8131-94de80bc398d"
кавычки поставь двойные везде |
|||
3
PQT
12.04.18
✎
06:23
|
(2)
в 1С код верно формирует запрос. Вот первая версия: ДокРем = Запрос.Выполнить().Выбрать(); Пока ДокРем.Следующий() Цикл ИдентификаторыПолей = "`id`,"; ЗначенияПолей = """"+ДокРем.Ссылка.УникальныйИдентификатор()+""","; Для каждого Рекв Из Реквизиты Цикл Если СокрЛП(ДокРем[Рекв]) <> "" Тогда ИдентификаторыПолей = ИдентификаторыПолей + "`"+Рекв+"`,"; ЗначенияПолей = ЗначенияПолей + """"+СтрЗаменить(ДокРем[Рекв],"""","'")+""","; КонецЕсли; КонецЦикла; ИдентификаторыПолей = Лев(ИдентификаторыПолей,СтрДлина(ИдентификаторыПолей)-1); ЗначенияПолей = Лев(ЗначенияПолей,СтрДлина(ЗначенияПолей)-1); Стр = Стр + "INSERT INTO `repairs_statuses`("+ИдентификаторыПолей+") VALUES ("+ЗначенияПолей+"); |"; ОбработкаПрерыванияПользователя(); Сообщить("Обновиляю на сайте документ "+ДокРем.date+" "+ДокРем.fio,СтатусСообщения.Обычное); КонецЦикла; И вторая версия: Пока ДокРем.Следующий() Цикл Стр = Стр + "; INSERT INTO `repairs_statuses` SET `id` = """+ДокРем.Ссылка.УникальныйИдентификатор()+ """"; Для каждого Рекв Из Реквизиты Цикл Если СокрЛП(ДокРем[Рекв]) <> "" Тогда Стр = Стр + ", `"+Рекв+"` = """+СтрЗаменить(ДокРем[Рекв],"""","`")+""""; КонецЕсли; КонецЦикла; Стр = Стр+" |"; ОбработкаПрерыванияПользователя(); Сообщить("Обновиляю на сайте документ "+ДокРем.date+" "+ДокРем.fio,СтатусСообщения.Обычное); КонецЦикла; |
|||
4
PQT
12.04.18
✎
06:25
|
(2) То что формирует 1С копирую из отладчика в буфер, вставляю в консоль phpMyAdmin, и он успешно его выполняет.
Но из 1С выдает ошибку, несмотря на то, что запрос идентичен |
|||
5
PQT
12.04.18
✎
06:26
|
Чтобы понятен был контекст этого фрагмента вот начало процедуры:
Запрос = Новый Запрос; Реквизиты = Новый Массив; //Реквизиты.Добавить("id"); Реквизиты.Добавить("number"); Реквизиты.Добавить("date"); Реквизиты.Добавить("fault"); Реквизиты.Добавить("repairing"); Реквизиты.Добавить("repairer"); Реквизиты.Добавить("fio"); //Реквизиты.Добавить("status"); Запрос.Текст = "ВЫБРАТЬ | РемонтОборудования.Номер КАК number, | РемонтОборудования.Дата КАК date, | РемонтОборудования.Ссылка КАК Ссылка, | РемонтОборудования.Неисправность КАК fault, | РемонтОборудования.ТехническоеЗаключение КАК repairing, | РемонтОборудования.Исполнитель.Наименование КАК repairer, | РемонтОборудования.Контрагент.ПолноеНаименование КАК fio, | РемонтОборудования.СтатусРемонта КАК status |ИЗ | Документ.РемонтОборудования КАК РемонтОборудования |ГДЕ | РемонтОборудования.ИзмененияВыгруженыНаСайт = ЛОЖЬ | И РемонтОборудования.Дата > &Дата"; Запрос.УстановитьПараметр("Дата", Дата); Стр = ""; ДокРем = Запрос.Выполнить().Выбрать(); ... (далее то что выше указал) |
|||
6
PQT
12.04.18
✎
06:50
|
о, сработало запрос отдельно по каждой строчке...хм, но так некрасиво както))...
Другой тогда вопрос: Есть ли преимущество у соединения через ODBC кроме того что пароль к sql не в коде 1С? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |