Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 07:50

Вопрос по интеграции (синтаксис)

Автор mohock, 13 авг 2010, 14:22

0 Пользователей и 1 гость просматривают эту тему.

mohock

Мне надо добавить строку в таблицу на FireBird (InterBase).
Есть такая завершающая конструкция которая запускает сохраненную процедуру в БД FireBird:

БД.Execute("НазваниеПроцедуры",ЗДЕСЬ_ПАРАМЕТРЫ,adCmdStoredProc);
где
adCmdStoredProc = 4 - это для ADO означает, что запускается процедура БД;
"НазваниеПроцедуры" - это название этой процедуры в БД
Так вот. Я в процедуру передаю 11 параметров. Они должны быть указаны на месте - ЗДЕСЬ_ПАРАМЕТРЫ
Мне надо знать синтаксис этой части. Простое перечисление ч/з запятую не проходит, т.к. у Execute только 3 параметра (ч/з запятую)
Ктонибудь сталкивался с этим?
Как правильно указать перечень параметров?

YouAreEmpty


mohock

Цитата: YouAreEmpty от 13 авг 2010, 15:10
"БД" это какой объект?

БД = Новый COMОбъект("ADODB.Connection");

ITShef

Как вариант можно накатать простую прогу на Delphi, которая подключалась бы к FiteBird и запихивала бы все в 1С через OLE.

ITShef

Кроме того, как показывает практика. если обмен с другими базами нужен постоянный или периодический, то внешняя прога со своим таймером очень хорошо для этого идет

mohock

В общем с использованием сохраненной процедуры на сервере пришлось отложить. Решил проблему так же как с выборками (SELECT).
Вот пример:

Функция prInsertPrihod(id_shop,date_prihod,bar_code,id_model,number_model,
   tkan,razmer,osobennosti,cena_prihoda,primachanie,cena_roznica) Экспорт
Текст = "insert into prihod("+
        "prihod.id_shop, "+
        "prihod.date_prihod, "+
        "prihod.bar_code, "+
        "prihod.id_model, "+
        "prihod.number_model, "+
        "prihod.tkan, "+
        "prihod.razmer, "+
        "prihod.osobennosti, "+
        "prihod.cena_prihoda, "+
        "prihod.primechanie, "+
        "prihod.cena_roznica ) "+
           "values("+
           id_shop+", "+
         "'"+Формат(date_prihod,"ДФ=dd.MM.yyyy")+"', "+
         bar_code+", "+
         id_model+", "+
         "'"+number_model+"', "+
         "'"+tkan+"', "+
         razmer+", "+
         "'"+osobennosti+"', "+
         cena_prihoda+", "+
         "'"+primachanie+"', "+
         cena_roznica+");";

Возврат Текст;
КонецФункции

Процедура ДобавитьПриходВShop(
   id_shop,date_prihod,bar_code,id_model,number_model,
   tkan,razmer,osobennosti,cena_prihoda,primachanie,cena_roznica
   ) Экспорт
   
Текст = prInsertPrihod(id_shop,date_prihod,bar_code,id_model,number_model,tkan,razmer,osobennosti,cena_prihoda,primachanie,cena_roznica);
   
БД.Execute(Текст,,adCmdText); // adCmdText = 1
   
КонецПроцедуры

Первая функция формирует текст запроса, а вторая запускает его на сервер.
Кстати, кому интересно подключаюсь к серверу таким образом:

Процедура ПодключитьсяКБД() Экспорт
      
   Пароль = "vasiapupkin";
   Пользователь = "SYSDBA";
   //создаем строку подключения
   Провайдер = "Provider=MSDASQL.1;";
   ПарольБД = "Password="+Пароль+";";
   БезопасностьИнформации = "Persist Security Info=True;";
   ПользовательБД = "User ID="+Пользователь+";";
   ИсточникДанных = "Data Source=SHOP_TEST;";
   МетодДоступа = "Mode=ReadWrite;";
   
   СтрокаПодключения = Провайдер + ПарольБД + БезопасностьИнформации +
                  ПользовательБД + ИсточникДанных + МетодДоступа;
                  
   //создаем СОМ-объект
   БД = Новый COMОбъект("ADODB.Connection");
         
#if client then   
   Состояние("Попытка соединения с БД ...");
#endif
   Попытка
      БД.Open(СтрокаПодключения);
      #if client then
      Состояние("Читаю данные с БД ...");
      #endif
       Подключение = Истина;
   Исключение
      #if client then
      Сообщить("БД открыть не удалось!" + Символ(13)+ ОписаниеОшибки());
      #endif
       Подключение = Ложь;
       Возврат;
   КонецПопытки;

КонецПроцедуры

В начале модуля обработки должа быть объявлена переменая:
Перем БД Экспорт;

Затем чтобы использовать процедуру ДобавитьПриходВShop, например, для кнопки следует в ее обработчике события Нажатие
написать, что то вроде:

Процедура КнопкаЗагрузки(Кнопка)
Если БД = Неопределено Тогда
  ПодключитьсяКБД();   
КонецЕсли;

Попытка
ДобавитьПриходВShop();
БД = Неопределено;
Исключение
БД = Неопределено;
Сообщить("Загрузка не удалась."+Символ(13)+"ОПИСАНИЕ ОШИБКИ: "+ОписаниеОшибки());
КонецПопытки;

КонецПроцедуры

Обратите внимание. В последнем примере ДобавитьПриходВShop() без параметров. Это упрощение для наглядности примера. На самом деле есть другая процедура в которой я формирую входные параметры и на кнопке вызывается именно она.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск