Работа с Access из 1Cv8.3

В некоторых случаях удобно выгрузить из 1С какие либо данные в Access для дальнейшей работы. Работа осуществляется через ADODB.Connection, причем возможно использование языка запросов Transact SQL. Пример ниже:

adOpenForwardOnly = 0; // код состояния
adLockPessimistic = 2; // режим блокировок
adOpenStatic = 3; // режим открытия соединения
adStateOpen = 1; // код открытия соединения
ИмяФайла = «C:\MyFile.accdb»; // имя файла 

// строка подключения к файлу БД Access
conn_str = «Provider=Microsoft.ACE.OLEDB.12.0; Data Source=» + ИмяФайла + «;»»»;
cn = Новый COMОбъект(«ADODB.Connection»); // объект для соединения
cn.Open(conn_str); // соединяемся с БД Access
Если (cn.State <> adStateOpen ) тогда // проверка открытия соединения
     Сообщить(«Не удалось открыть ADODB.Connection»);
     Возврат;
КонецЕсли;
rs = Новый COMОбъект(«ADODB.Recordset»); // объект для обхода строк
rs_select = Новый COMОбъект(«ADODB.Recordset»);
strSQL = «customers»; // таблица Access, с которой имеем дело
rs.Open(strSQL, cn, adOpenStatic, adLockPessimistic); // открываем таблицу 
strSQL = «select name from customers where id=100»; // sql запрос к таблице
rs_select.Open(strSQL, cn, adOpenStatic, adLockPessimistic); // делаем выборку
Если rs_select.EOF = Ложь тогда // проверка наличия записей в выборке
     Сообщить(«Нет строки с таким идентификатором: «);
     rs_select.Close(); // закрываем выборку
     rs_select = Неопределено; // уничтожаем лишние данные

КонецЕсли;
Попытка
rs.AddNew(); // добавить новую строку в табл  customers
rs.Fields(0) .Value = 250; // имя нового контрагента
rs.Fields(1) .Value = «Новый контрагент»; // имя нового контрагента
rs.Update(); // записать новую строку в таблицу
// вывод на печать строки по колонкам
Для Каждого col Из rs.Fields Цикл
     Сообщить(«Колонка « + col.Name + » = « + Строка(col.Value));
КонецЦикла;
Исключение
// исключение может быть вызвано наличием сроки с таким же 
// идентификатором
Если  rs.ActiveConnection.Errors(0).Number = -2147217887  тогда
     Сообщить(«Такая запись уже есть в таблице»);
Иначе
     Сообщить(ОписаниеОшибки());// другая ошибка
КонецЕсли;
КонецПопытки;
// закрываем выборку, если она открыта
Если (rs.state = adStateOpen) тогда
      rs.Close();
КонецЕсли;
// закрываем соединение с БД, если оно открыто
Если cn.state = adStateOpen тогда
      cn.Close();
КонецЕсли;
// уничтожаем лишние данные
rs = Неопределено;
cn = Неопределено;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *