Обновление записей SQL через 1с

1. user1840899 18.07.23 12:09 Сейчас в теме
Пытаюсь обновить записи из 1с в phpmyadmin, но выдает ошибку о не правильном синатаксисе.
Пробовал разными способами, но итог один,подскажите как исправить?
Попытка

Пока Выборка.Следующий() Цикл
ТекЗапись = "UPD ATE Events_Types
|SET
| [Title] = '"+Выборка.Наименование+"',
| [Responsible] = '"+Выборка.Ответственный+"',
| [Creator] = '"+Выборка.Автор+"',
| [Publish] = '"+Число(Выборка.Публиковать)+"',
| [GPT] = '"+Число(Выборка.GPT)+"',
| [Edited] = '"+Число(Выборка.Отредактировано)+"',
| [Printer] ='"+Число(Выборка.Типограф)+"',
| [Verified] = '"+Число(Выборка.Проверено)+"'
| WHERE [ID1C] > 0";
//ТекЗапись = "UPDATE Events_Types SE T (Title = '"+Выборка.Наименование+"', Responsible = '"+Выборка.Ответственный+"', Creator = '"+Выборка.Автор+", Publish = '"+Число(Выборка.Публиковать)+", GPT = '"+Число(Выборка.GPT)+", Edited = '"+Число(Выборка.Отредактировано)+", Printer = '"+Число(Выборка.Типограф)+", Verified = '"+Число(Выборка.Проверено)+" WHERE ID1c > 0)";
КонецЦикла;

Соединение.Execute(ТекЗапись);
Сообщить("Данные обновлены!");

Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;



/////////////////////////////////////////////

{Справочник.ВидСобытия.МодульМенеджера(97)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 8.0(a) Driver][mysqld-8.0.30]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 '[Title] = 'Рстория РёРіСЂ',
[Responsible] = '',
[Creator] = '',
[Publi' at line 3
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 18.07.23 12:33 Сейчас в теме
(1)1. Данный код будет глючить на числах, больше 1000.
2. Строить текст запроса, собирая его из значений - моветон, используйте параметры. Подробности гуглить по "параметры ADODB"
4. user1840899 18.07.23 12:56 Сейчас в теме
(2)В конфе скорее всего не будет более 1000 записей.
Я только познаю работу с sql из 1с, можете подсказать, что здесь не так и как оптимизировать код?
У меня стоит задача, я сначала добавляю записи в sql у которых idsql = 0, после обновляю записи в sql у которых в 1с idsql > 0 и вытаскивать из sql id для записи в таблицу значений, для дальнейшей работы, чтоб по нему и смотреть, значения idsql
6. nomad_irk 76 18.07.23 13:20 Сейчас в теме
(4)вам нужно разобраться в теме взаимодействия с БД средствами ADODB, почитать документацию про объекты Connection/RecordSet/Command, про то, как можно использовать параметры в тексте запроса и как устанавливать их значения.
8. user1840899 18.07.23 13:37 Сейчас в теме
(6) Спасибо за тему.
Решил проблему с обновлением строк, но есть проблема вставляются во все строки БД только первая стока из 1с, в чем может быть проблема?
7. nomad_irk 76 18.07.23 13:37 Сейчас в теме
(4)
...можете подсказать, что здесь не так и как оптимизировать код?

По-сути тут все не так: см. (2). Оно, конечно, работать будет и в таком виде, если сказать соединению, что все запросы будут в кодировке Unicode.
Как включить это с помощью строки подключения должно быть указано в документации к драйверу ODBC MySQL, либо на каком-нибудь
https://www.connectionstrings.com

Код вида:
| [Publish] = '"+Число(Выборка.Публиковать)+"',

выполняет двойное преобразование значения: строка -> число -> строка. Для чего это выполняется - вообще не понятно.
9. user1840899 18.07.23 13:41 Сейчас в теме
(7) Везде где стоит преобразование, там булево, а в phpmyadmin булево числовое
я изменил немного код
Попытка 
		
		Пока Выборка.Следующий() Цикл 		
			Соединение.Execute("UPDATE Events_Types 
			|SET
			|	Title = '"+Выборка.Наименование+"',
			|	Responsible = '"+Выборка.Ответственный+"',
			|	Creator = '"+Выборка.Автор+"',
			|	Publish = '"+Число(Выборка.Публиковать)+"',
			|	GPT = '"+Число(Выборка.GPT)+"',
			|	Edited = '"+Число(Выборка.Отредактировано)+"',
			|	Printer ='"+Число(Выборка.Типограф)+"',
			|	Verified = '"+Число(Выборка.Проверено)+"'");
			
		КонецЦикла;
		
		Сообщить("Данные обновлены!");
		
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
Показать
10. nomad_irk 76 18.07.23 13:53 Сейчас в теме
(9)
Везде где стоит преобразование, там булево, а в phpmyadmin булево числовое

если уж вы пошли костыльно-ориентированным путем, то в запросе, формирующем выборку делайте преобразование

выбор когда Публиковать
     тогда "1"
    иначе "0"
конец как публиковать
3. user1880116 18.07.23 12:37 Сейчас в теме
В строке подключения укажи кодировку utf8

Ждем следующую тему: "Почему для всех записей пишутся последние значения полей запроса"
5. user1840899 18.07.23 12:58 Сейчас в теме
(3)
//Подключение к SQL-серверу
	Попытка
		Соединение  = Новый COMОбъект("ADODB.Connection");
		Команда     = Новый COMОбъект("ADODB.Command");
		Выборка     = Новый COMОбъект("ADODB.RecordSet");
		Соединение.ConnectionString =  "DRIVER=" + Драйвер + ";Server=" + СРВ + ";Database=" + БД + ";UID=" + УИД + ";PWD=" + ПВД + ";";
		Соединение.ConnectionTimeout = 30;
		Соединение.CommandTimeout = 600;
		//Открытие соединение
		Соединение.Open();
		Команда.ActiveConnection   = Соединение;
		Сообщить("Успешное подключение!");
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;
Показать

где указать кодировку?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот