Имя: Пароль:
1C
1С v8
Подключение к pgsql через СОМ. смена схемы по умолчанию.
,
0 KuJIT
 
11.12.15
13:39
Собственно, подключаюсь к БД (копипасты с форумов)

Connection = Новый COMОбъект("ADODB.CONNECTION");
    Connection.Provider    = "MSDASQL.1";
    Connection.ConnectionString = "Driver={PostgreSQL Unicode};data source=PostgreSQL35W;Server="+Хост+";Port=" +
                               Порт+";Database="+ИмяБД+";Uid="+ИмяПользователя+";Pwd="+Пароль+";STMT="+"utf8";        
    Попытка            
        Сообщить("Подключение к базе PostgreSQL...");
        Connection.open();            
        Сообщить("База PostgreSQL подключена");
    Исключение            
        Сообщить(ОписаниеОшибки());
    //    Сообщить("Не могу подключиться к базе PostgreSQL ");
        Возврат;
    КонецПопытки;


Однако есть проблема: нужно подключиться не к схеме "public", подключение к которой идет по умолчанию, а к схеме "test". Как это можно сделать?
1 KuJIT
 
11.12.15
13:40
&НаКлиенте
Функция ПолучитьТЗ(ИмяТаблицы, Connection)    
    //ВременнаяТаблица = Новый ТаблицаЗначений;
    МассивРезультат = Новый Массив;
    
    НаборЗаписей = Новый ComObject("ADODB.RecordSet");
    Команда = Новый COMОбъект("ADODB.Command");
    Попытка    
        Команда.ActiveConnection = Connection;    
        Команда.CommandText = ПолучитьТекстЗапроса(ИмяТаблицы);    
        НаборЗаписей = Команда.Execute();    
        Сообщить("Данные получены.");
    Исключение    
    //    Сообщить("Нет данных.");  
        Сообщить(ОписаниеОшибки());
        Возврат -1;
    КонецПопытки;


    ////Добавление колонок во временную таблицу
    //Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count - 1 Цикл                
    //    ИмяСтолбца = НаборЗаписей.Fields.Item(НомерСтолбца).Name;                
    //    ВременнаяТаблица.Колонки.Добавить(ИмяСтолбца);
    //КонецЦикла;

    Пока НЕ НаборЗаписей.EOF Цикл                
        // Заполнение временной таблицы таблицы
        ПсевдоСТрока = Новый Структура;
        //НоваяСтрока = ВременнаяТаблица.Добавить();                
        Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл                              
            //НоваяСтрока.Установить(НомерСтолбца, СокрЛП(НаборЗаписей.Fields(НомерСтолбца).Value));  
            ПсевдоСТрока.Вставить(СокрЛП(НаборЗаписей.Fields(НомерСтолбца).Name), СокрЛП(НаборЗаписей.Fields(НомерСтолбца).Value));
        КонецЦикла;
        МассивРезультат.Добавить(ПсевдоСТрока);

        НаборЗаписей.MoveNext();
    КонецЦикла;
    Возврат МассивРезультат;
КонецФункции


Так получаю результат запроса
2 KuJIT
 
11.12.15
13:49
(0) Ну, в общем, решилась проблема. Всего лишь нужно было в тексте запроса указать имя схемы перед именем таблицы.

ТекстЗапроса = "SELECT * FROM " + "test." + ИмяТаблицы;
Вместо
ТекстЗапроса = "SELECT * FROM " + ИмяТаблицы;