8.х Запрос к SQL

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Persempre, 19 мар 2014.

  1. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Добрый день люди добрые. Помогите с запросом. Хочу из 1С сделать запрос напрямую к базе SQL.
    Пишу так
    Код:
        ConnectionString = "Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User ID=sa;Initial Catalog=PerfmonData;Data Source=192.168.*.*";
        Соединение = Новый COMОбъект("ADODB.Connection");
        Соединение.ConnectionString = ConnectionString;
        Соединение.CommandTimeout = 2700;
        Попытка
            Соединение.Open();
            Сообщить("****** Connect ******");
        Исключение
            Предупреждение("****** Error connect ******"); Return
        КонецПопытки;
    
        ТекстЗапроса ="SELECT
        |c._URL,
        |a.Name,
        |c._Date
        |FROM
        |_UsersWorkHistory c LEFT JOIN
        |(SELECT 
        |ID,
        |Name
        |FROM v8users) a ON c._UserID = a.ID
        |order by c._Date";
        СКЛ = New COMОбъект("ADODB.Command");
        СКЛ.ActiveConnection = Соединение;
        СКЛ.CommandText = ТекстЗапроса; 
       
        Соединение.Close();
    
    Скажите после подключения как написать запрос? я имею ввиду у нас в 1с это запрос = новый запрос. а тут как это написать и выполнить его?

    заранее спасибо
  2. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    RS = Новый COMОбъект("ADODB.Recordset");
    попытка
    RS.Open(ТекстЗапроса, Соединение);
    исключение
    Persempre нравится это.
  3. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Снимок.JPG

    Не хочет он Open почему-то... Может что делаю не так?
  4. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    up очень интересно как. Помогите плз
  5. Maria_Ach
    Offline

    Maria_Ach

    Регистрация:
    14 июл 2006
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    У Вас два раза команда Open , обратите внимание.
    Соединение.Open() и RS.open()
    --- Объединение сообщений, 20 мар 2014 ---
    Скорее всего вместо строки RS.open() надо СКЛ.Execute()
  6. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    решил вопрос. кому интересно - работает вот так:
    // ЗАПРОС К MS SQL
    ТекстЗапроса ="SELECT
    |c._URL,
    |a.Name,
    |c._Date
    |FROM _UsersWorkHistory c LEFT JOIN
    |(SELECT ID, Name FROM v8users) a
    |ON c._UserID = a.ID order by c._Date";

    Сервер = "192.168.*.*";
    ПользовательСервера = "sa";
    ПарольСервера = "*********";
    БазаСервера = "*********";

    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение_param = "Provider = SQLOLEDB.1; server=" + СокрЛП(Сервер) + "; uid=" + СокрЛП(ПользовательСервера) + "; pwd=" + СокрЛП(ПарольСервера) + "; database=" + СокрЛП(БазаСервера) + "; STMT=SET CHARACTER SET utf8";

    Соединение.Open(Соединение_param);
    СоединениеУстановлено = Истина;

    // Попытка подключения к MS SQL
    Попытка

    Сообщить("Соединение установлено");
    НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
    НаборЗаписей.ActiveConnection = Соединение;
    НаборЗаписей.Open(ТекстЗапроса);

    Пока НЕ НаборЗаписей.Eof() Цикл
    Сообщить(НаборЗаписей.Fields("_URL").Value);
    Сообщить(НаборЗаписей.Fields("_Date").Value);
    НаборЗаписей.MoveNext();
    КонецЦикла;
    НаборЗаписей.Close();

    Исключение

    Сообщить("" + ТекущаяДата() + " Connection error: " + ОписаниеОшибки());
    СоединениеУстановлено = Ложь;
    Return;

    КонецПопытки;
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот так еще можно
    Код:
    ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + СокрЛП(ПутьКБазе) + ";Mode=Read";
    
    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение.ConnectionTimeOut = 600;
     Попытка  
    Соединение.Open(ConnectString); 
    Исключение
    Предупреждение("Не удалось соединиться с базой данных!");
    Сообщить(ОписаниеОшибки());
    Возврат; 
    КонецПопытки;
     
    Cmd = Новый COMОбъект("ADODB.Command");
    Rs = Новый COMОбъект("ADODB.RecordSet");
    Cmd.ActiveConnection = Соединение;
    Cmd.CommandTimeOut = 600;
    Cmd.CommandType = 1;//запрос на языке SQL 
    Rs.ActiveConnection = Соединение;
    ТекстЗапроса = ....//получаем текст запроса
      Cmd.Commandtext = СокрЛП(ТекстЗапроса);
    
    Попытка
    Rs = Cmd.Execute();
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Persempre нравится это.

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