Имя: Пароль:
1C
 
Обмен данными с внешней (не 1с) базой PostgreSQL.
0 fyntom
 
02.04.09
08:45
Всем привет.

Есть внешняя база PostgreSQL содержащая некоторые данные, которых нет в 1с 8.1 Бухгалтерия, так же данных которые есть в бухгалтерии нет в этой базе.

Необходимо обеспечить обмен данными по событиям происходящим в 1с. Если происходит добавление платежа в 1С то информация о платеже должа быть передана в PostgreSQL базу.

На текущий момент пытаюсь хотябы соединится с PostgreSQL.

Процедура СоединитсяНажатие(Элемент)
 //  Вставить содержимое обработчика.
  // СтрокаСоединения="Provider=PostgreSQL OLE DB Provider;Data Source='"+ЭлементыФормы.пвСервер.Значение+"';UID='"+ЭлементыФормы.пвЛогин.Значение+"';PWD='"+ЭлементыФормы.пвПароль.Значение+"';Initial Catalog='"+ЭлементыФормы.пвБазаДанных.Значение+"';DefaultDatabase='ahml'";//Integrated Security=SSPI;";
  // Соединение=Новый ComObject("ADODB.Connection");
  // Соединение.ConnectionString=СтрокаСоединения;
  //    
  // Попытка
  //    Соединение.Open();
  // Исключение
  //    Сообщить(ОписаниеОшибки());
  //    Возврат;
  //КонецПопытки;
 
  СтрокаСоединения = ("Provider=PostgreSQL OLE DB Provider;Driver={PostgreSQL Unicode}; Deleted=No; Data Source = ") + ЭлементыФормы.пвСервер.Значение +(";UID=") + ЭлементыФормы.пвЛогин.Значение + ("; PWD=") + ЭлементыФормы.пвПароль.Значение + (";");
                     
   Подключение = Новый ComObject("ADODB.Connection");
   Подключение.ConnectionString=СтрокаСоединения;
   // Подключение.Mode = 3;
       Попытка
           Подключение.Open(СтрокаСоединения);
           Состояние ("Подключение к серверу SQL...");
       Исключение
           Сообщить(ОписаниеОшибки());
           Возврат;
       КонецПопытки;

   
 
   //СтрокаСоединения="Driver={PostgreSQL Unicode};Server='"+ЭлементыФормы.пвСервер.Значение+"';Port=5432;Database='"+ЭлементыФормы.пвБазаДанных.Значение+"';Uid='"+ЭлементыФормы.пвЛогин.Значение+"';Pwd='"+ЭлементыФормы.пвПароль.Значение+"';";//Integrated Security=SSPI;";
   //Соединение=Новый ComObject("ADODB.Connection");
   //Соединение.ConnectionString=СтрокаСоединения;
   //    
   //Попытка
   //   Соединение.Open();
   //Исключение
   //   Сообщить(ОписаниеОшибки());
   //   Возврат;
   //КонецПопытки;

   
   Записи=Новый ComObject("ADODB.RecordSet");
   Записи.ActiveConnection=Подключение;
   //Записи.Open("текст прямого запроса");
КонецПроцедуры

Не при одном из указанных выше способов соединение не было установлено. Пишет следующее:
Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанного поставщика. Вероятно, он установлен неправильно.
1 ТелепатБот
 
гуру
02.04.09
08:45
2 fyntom
 
02.04.09
08:47
Причем ODBC драйвер установлен корректно и настроен. Пишет что соединение устанавливается если тест нажимаешь
3 ДенисЧ
 
02.04.09
08:49
установи правильно драйвера...
4 ДенисЧ
 
02.04.09
08:50
кстати, есть такой рулёзный сайтик http://www.connectionstrings.com/
5 fyntom
 
02.04.09
08:52
Стоит вот этот драйвер
http://wwwmaster.postgresql.org/download/mirrors-ftp/odbc/versions/msi/psqlodbc_08_03_0400.zip Настроен и поставлен
6 fyntom
 
02.04.09
08:54
(4) с этого сайт и брал строку.

Пробовал вот эту
Provider=PostgreSQL OLE DB Provider;Data Source=myServerAddress;location=myDataBase;User ID=myUsername;password=myPassword;timeout=1000;
и вот эту

Driver={PostgreSQL UNICODE};Server=IP address;Port=5432;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

Не в том не в другом случае соединение не устанавливается
7 fyntom
 
02.04.09
08:58
При использовании вот такой строки:

СтрокаСоединения="Driver={PostgreSQL};Server='"+ЭлементыФормы.пвСервер.Значение+"';Port=5432;Database='"+ЭлементыФормы.пвБазаДанных.Значение+"';Uid='"+ЭлементыФормы.пвЛогин.Значение+"';Pwd='"+ЭлементыФормы.пвПароль.Значение+"';";//Integrated Security=SSPI;";
   Соединение=Новый ComObject("ADODB.Connection");
   Соединение.ConnectionString=СтрокаСоединения;
       
   Попытка
      Соединение.Open();
   Исключение
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;


{Форма.Форма(47)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
8 ДенисЧ
 
02.04.09
08:59
ну что я могу сказать...
Нефиг пользоваться студенческой под(де)лкой (с) ЯЛюбимый.
9 fyntom
 
02.04.09
09:03
А при использования вот такой строки

СтрокаСоединения="Driver={PostgreSQL Unicode};Server='"+ЭлементыФормы.пвСервер.Значение+"';Port=5432;Database='"+ЭлементыФормы.пвБазаДанных.Значение+"';Uid='"+ЭлементыФормы.пвЛогин.Значение+"';Pwd='"+ЭлементыФормы.пвПароль.Значение+"';";//Integrated Security=SSPI;";
   Соединение=Новый ComObject("ADODB.Connection");
   Соединение.ConnectionString=СтрокаСоединения;
       
   Попытка
      Соединение.Open();
   Исключение
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;


{Форма.Форма(47)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Could not connect to the server;
Could not resolve hostname

В качестве сервера стоит IP адрес. Который точно пингуется.
10 fyntom
 
02.04.09
09:36
Поделитесь кусочком кода. Как это можно реализовать. (UP)
11 fyntom
 
02.04.09
10:01
УРА!!! Получилось. Все дело было в кавычках в строке соединения. Их использовать не нужно.

Заработала вот эта строка:
СтрокаСоединения="Driver={PostgreSQL Unicode};Server="+ЭлементыФормы.пвСервер.Значение+";Port=5432;Database="+ЭлементыФормы.пвБазаДанных.Значение+";Uid="+ЭлементыФормы.пвЛогин.Значение+";Pwd="+ЭлементыФормы.пвПароль.Значение+";";//Integrated Security=SSPI;";