Mysql и 1с

Тема в разделе "1C и всё что с ней связано", создана пользователем maxrule, 15 ноя 2007.

Статус темы:
Закрыта.
  1. maxrule

    maxrule Гость

    Добрый вечер, есть задача перенести справочник (Характеристики) в таблицу базы 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'
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    db.Execute( " INSERT INTO test (name) VALUES ("+name_1+")");
     
  3. maxrule

    maxrule Гость

    этот вариант выдает:
    Произошла исключительная ситуация (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 - значение справочника
     
  4. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Код (Text):
    db.Execute( " INSERT INTO test (name) VALUES ("+Симв(34)+name_1)+Симв(34)+")");
    ? Код символа " " " - 34. Если не пройдет 39 - код " ' "

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

    maxrule Гость

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

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

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Судя по всему, 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: не называй меня "на Вы", пожалуйста, я ФИДОшник, там это почти оскорбление )
     
  7. maxrule

    maxrule Гость

    лишнюю скобку я заметил, но это мелоч, объяснение очень устроило
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей