Работа с SQL-сервером напрямую

В предыдущей статье http://life1c.ru/post/2051 мы научились подключаться к сторонней БД PostgreSQL с помощью строки подключения. В этой статье разберёмся как осуществлять к этой БД свои SQL-запросы.

 

COM-объект ADODB.Command

В 1С Предприятие для целей выполнения различных команд, а также SQL-запросов лучше всего использовать COM-объект ADODB.Command.

1
ЗапросАДО = Новый COMОбъект("ADODB.Command");

С помощью этого объекта выполняются SQL-запросы. А с помощью COM-объекта ADODB.Recordset возвращается результат выполнения команды.

1
RS = Новый COMОбъект("ADODB.Recordset");

У объекта ADODB.Command есть несколько полей. Наиболее важные из них два:

  • ActiveConnection – Активное соединение с БД
  • CommandText – Текст команды или SQL-запроса.

Для выполнения команд можно воспользоваться следующей универсальной функцией 1С:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Функция ВыполнитьКоманду(Соединение, ТекстЗапроса, RS = Неопределено) Экспорт
 
	ЗапросАДО = Новый COMОбъект("ADODB.Command");
	RS = Новый COMОбъект("ADODB.Recordset");
	ЗапросАДО.ActiveConnection = Соединение;
	ЗапросАДО.CommandText = ТекстЗапроса;
 
	Попытка
		Успех = Истина;
		RS = ЗапросАДО.Execute();
	Исключение //нет записей в рекордсете
		Успех = Ложь;
        Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
    КонецПопытки;
 
	ЗапросАДО = Неопределено;
 
	Возврат Успех;
КонецФункции;

Подключение к БД, выполнение SQL запроса и обход результата делаются следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
RS = Неопределено;
ОбъектФормы = РеквизитФормыВЗначение("Объект");
Соединение = ОбъектФормы.ОткрытьПодключение(ОбъектФормы.СтрокаСоединения, 30);
 
Если Соединение <> Неопределено Тогда
	Сообщить("Соединение с БД установлено успешно!");
	Результат = ОбъектФормы.ВыполнитьКоманду(Соединение, ОбъектФормы.ЗапросSQL, RS);
	Сообщить("Запрос выполнен успешно: " + Результат);
 
	RS.MoveFirst();
	ИндексЗаписи = 1;
	Пока RS.EOF = 0 Цикл	
		Для НомерСтолбца = 0 По RS.Fields.Count-1 Цикл
			ИмяСтолбца = RS.Fields.Item(НомерСтолбца).Name;
			Сообщить(Строка(ИндексЗаписи) + ": " + ИмяСтолбца + "=" + RS.Fields(ИмяСтолбца).Value);
		КонецЦикла;
		RS.MoveNext();
		ИндексЗаписи = ИндексЗаписи + 1;
	КонецЦикла;
 
	ОбъектФормы.ЗакрытьПодключение(Соединение);
КонецЕсли;

Работать с SQL-сервером напрямую целесообразно в следующих случаях:

  • Для более быстрого добавления новых записей в SQL-таблицу ИБ 1С (конструкции UPDATE и INSERT)
  • Для операций чтения/записи при обмене со сторонней системой (не 1С Предприятие)
  • Для выполнения команд СУБД прямо из 1С, которые невозможно выполнить другими способами.

 

Обработка 1С «Выполнение SQL запроса»

Для наглядных операций с SQL-запросами была создана обработка «Выполнение SQL-запроса». Её можно скачать по ссылке ниже.

Для исполнения запроса или команды:

  • Корректируем строку подключения. Про строку подключения было написано здесь http://life1c.ru/post/2051.
  • Пишем свой SQL-запрос.
  • Нажимаем кнопку «Выполнить».

Скачать