Mysql и 1с

  • Автор темы maxrule
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

maxrule

#1
Добрый вечер, есть задача перенести справочник (Характеристики) в таблицу базы mysql
код:
db = Новый COMObject ("ADODB.Connection") ;
db.ConnectionString =("DRIVER=MySQL ODBC 3.51 Driver; SERVER=localhost;DataBase=my_base; UID=root;PWD=roottoor");
db.Open();
db.Execute("SET NAMES cp1251");

Ширина_1 = Справочники.Характеристики;
Выборка = Ширина_1.Выбрать();
Пока Выборка.Следующий()
Цикл
code_1 = Выборка.Код;
name_1 = Выборка.Наименование;
db.Execute( " INSERT INTO test (name) VALUES (name_1)");
КонецЦикла;


Вопрос в следующем, если передаем значение в кавычках(INSERT INTO test (name) VALUES ('name_1'):blink: - соответственно в таблицу пишется строка, а вот как передать значение переменной name_1??????Если пишу INSERT INTO test (name) VALUES (name_1) то ошибка:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver][mysqld-4.1.22-community-nt]Unknown column 'name_1' in 'field list'
 
M

maxrule

#3
этот вариант выдает:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver][mysqld-4.1.22-community-nt]Unknown column 'x1440' in 'field list'


такие же проблемы и с mssql, ну токо соответственно строку соединения поменять нужно

хотя x1440 - значение справочника
 

Zab

Well-known member
07.08.2006
583
0
#4
Код:
db.Execute( " INSERT INTO test (name) VALUES ("+Симв(34)+name_1)+Симв(34)+")");
? Код символа " " " - 34. Если не пройдет 39 - код " ' "

PS: Для восьмерки аналогичная функция Символ(КодСимвола)
 
M

maxrule

#5
Уважаемый ГУРУ, а не могли бы ВЫ в кратце объяснить или скинуть ссылку по Вашему примеру.
Он отрабатывает, но я не как не могу понять, почему именно в таком виде

я имею ввиду почему в таком виде нужно писать значения полей
 

Zab

Well-known member
07.08.2006
583
0
#6
Судя по всему, db.Execute() принимает текстовую строки у запросом. Синтаксис этого запроса подразумевает, что значение передается в кавычках. Но эти кавычки нагло используются в синтаксисе 1С как обозначение начала/конца строки. Встает вопрос: как можно сохранить в строке эту самую кавычку, не написав ее в строке? Тут нам и приходит на помощь Симв(34).
Как 1С обрабатывает твой вызов:
  • "INSERT INTO test (name) VALUES ('name_1')" - это просто строчка, которая и передастся в Execute(). Соответственно, в базе будет name_1
  • "INSERT INTO test (name) VALUES (name_1)" - тоже строка к выполнению, твоя база пытается вставить значение name_1. Почему ошибка? а потому, что в db нет такой переменной. Он и ругается "Unknown column 'name_1' in 'field list'". Переменная-то у тебя в 1С. А db про нее не в курсе.
  • " INSERT INTO test (name) VALUES ("+name_1+")" вернет строку " INSERT INTO test (name) VALUES (x1440)" Соответственно, как и в прошлом случае, вылетит ошибка "Unknown column 'x1440' in 'field list'" т.к. db не знает переменной х1440
  • " INSERT INTO test (name) VALUES ("+Симв(34)+name_1+Симв(34)+")" а тут результатом будет " INSERT INTO test (name) VALUES ("name_1") " т.е. строка записанная по правилам команды Insert, содержащая в Values строку (в кавычках), которую надо добавить.
надеюсь, ты понял мой поток сознания )))
PS: там была скобка лишняя закрывающая после name_1. :)
PPS: не называй меня "на Вы", пожалуйста, я ФИДОшник, там это почти оскорбление )
 
M

maxrule

#7
лишнюю скобку я заметил, но это мелоч, объяснение очень устроило
 
Статус
Закрыто для дальнейших ответов.