Access

Загружаем данные из Access в 1С

Код 1C v 8.х

Источник: http://disk1c.ru/2016/04/26/работа-с-access-из-1cv8-3/

Файл = "C:\files\demo.mdb" ; //СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + "; Extended Properties=""Excel 8.0;HDR=NO;"""; СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + ";"""; Connection = Новый COMОбъект("ADODB.Connection"); Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandText = "S_elect * FROM Table1"; Command.CommandType = 1; RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = Command.Execute(); стр =""; Пока RecordSet.EOF() = 0 Цикл для н=0 по Recordset.Fields.Count -1 цикл стр = стр + " " + Recordset.Fields(н).Value; КонецЦикла; Сообщить(стр); стр =""; RecordSet.MoveNext(); КонецЦикла; RecordSet.Close(); Connection.Close();

Еще вариант

//Очищаем наше табличное поле

ТабличноеПоле1.Очистить();

ТабличноеПоле1.Колонки.Очистить();

//Готовим строку соединения с MS Access

//Путь к базе указывается в самом конце

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"C:\mydb.mdb";

СоединениеСБазой = Новый COMОбъект("ADODB.Connection");

//Соединяемся

СоединениеСБазой.Open(СтрокаПодключения);

//Получаем набор записей из таблицы demo_table

КоллекцияЗаписей = Новый COMОбъект("ADODB.Recordset");

КоллекцияЗаписей.Open("select * from demo_table", СоединениеСБазой,1);

//считываем структуру полей таблицы

//В таблице значений создаем все колонки, которые есть в Access'овской таблице

Для сч = 0 по КоллекцияЗаписей.Fields.Count - 1 Цикл

ТабличноеПоле1.Колонки.Добавить("Колонка" + сч,, Строка(КоллекцияЗаписей.Fields.Item(сч).Name));

КонецЦикла;

//Перемещаем маркер на первую запись

КоллекцияЗаписей.MoveFirst();

//считываем данные из таблицы

//и добавляем их в ТЗ

Пока НЕ КоллекцияЗаписей.EOF Цикл

НоваяСтрока = ТабличноеПоле1.Добавить();

Для сч = 0 по КоллекцияЗаписей.Fields.Count - 1 Цикл

НоваяСтрока["Колонка" + сч] =

КоллекцияЗаписей.fields(ТабличноеПоле1.Колонки[сч].Заголовок).Value;

КонецЦикла;

КоллекцияЗаписей.MoveNext();

КонецЦикла;

//Отображаем данные из ТЗ в ТабличномПоле

ЭлементыФОрмы.ТабличноеПоле1.Значение = ТабличноеПоле1;

ЭлементыФОрмы.ТабличноеПоле1.СоздатьКолонки();

Код 1C v 7.x

Акцесс = СоздатьОбъект("ADODB.CONNECTION");

Попытка СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mybase.mdb;Uid=Admin;Pwd="; Акцесс.Open(СтрокаПодключения);Исключение Сообщить("Все плохо:"+ОписаниеОшибки()); Возврат;КонецПопытки;Команда = СоздатьОбъект("ADODB.Command");Команда.ActiveConnection=Акцесс;ТекстСелект = "S_elect * FROM tblCustoms";НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");Команда.CommandText=ТекстСелект;Попытка НаборЗаписей=Команда.Execute;Исключение Сообщить("Обломись:"+ОписаниеОшибки());КонецПопытки;Попытка НаборЗаписей.MoveFirst();Исключение //нет записей в рекордсете НаборЗаписей.Close(); Возврат;КонецПопытки;Пока НаборЗаписей.EOF()=0 Цикл ИНН = НаборЗаписей.Fields("INN").Value; //ну и т.д. НаборЗаписей.MoveNext();КонецЦикла;НаборЗаписей.Close();

// Для тех, у кого в базе Акцесс создана рабочая группа (есть файлик mdw), строка подключения будет такая:

СтрокаПодключения="Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd=";

Работа с ACCESS из 1С через DAO

Код 1C v 7.x

Процедура Выполнить()

//фасВладелец = СтрЗаменить(фасВладелец," ","_"); Спр = СоздатьОбъект("Справочник.ТоварыВПрайсе"); Спр.ИспользоватьВладельца(ФасВладелец); dbe = СоздатьОбъект("dao.DBEngine.36"); wksp = dbe.Workspaces(0); db = 0; Если ФС.СуществуетФайл(КаталогИБ()+"Pric_list.mdb")=0 Тогда // db = wksp.CreateDataBase(КаталогИБ()+"Pric_list.mdb",";LANGID=0x0419;Cp=1251;Country=0"); // db.Execute("Create table [" + Строка(фасВладелец) + "] |(Rec_ind integer, |Код text, |Артикул text, |Цена integer, |Товар text, |Единица text, |Val text);" ); db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);"); Иначе db= wksp.OpenDataBase(КаталогИБ()+"Pric_list.mdb"); Попытка rs = db.OpenRecordset(Строка(фасВладелец)); Исключение Сообщить("Создается новая таблица"); КонецПопытки; Если ПустоеЗначение(rs)= 1 Тогда db.Execute("Create table [" + Строка(фасВладелец) + "] |(Rec_ind integer, |Код text, |Артикул text, |Цена integer, |Товар text, |Единица text, |Val text);" ); db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);"); КонецЕсли; db.Execute("Delete * From ["+Строка(фасВладелец)+"];"); КонецЕсли; rs = db.OpenRecordset(Строка(фасВладелец)); Y = 1; Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл лсЕдиницы = ""; Если Спр.асТовар.апТип=Перечисление.ТипТовара.Услуга Тогда лсЕдиницы = ""; ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Весовой Тогда лсЕдиницы = "г"; ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Штучный Тогда лсЕдиницы = "шт."; КонецЕсли; Если Спр.ЭтоГруппа() = 0 Тогда rs.AddNew(); rs.Rec_ind = Y; rs.Код= Спр.асТовар.ПолныйКод(); rs.Артикул = Спр.асТовар.сАртикул; rs.Цена = Спр.чЦена; rs.Товар=Спр.асТовар.сПолнНаименование; rs.Единица = лсЕдиницы; rs.Val = Спр.асВалюта.Код; rs.Update(); Y=Y+1; КонецЕсли; КонецЦикла; db.Close(); Сообщить("Выгрузка завершена"); КонецПроцедуры

Код 1C v 7.x

Процедура ACCESS() dbe=CreateObject("DAO.DBEngine.36"); wksp=dbe.Workspaces(0); db=0; // в ковычках имя фаила с расширением MDB Если ФС.СуществуетФайл(КаталогПользователя()+"sr.mdb")=0 Тогда // создание файла базы данных с русским порядком сортировки db=wksp.CreateDataBase(КаталогПользователя()+"mars_sr.mdb",";LANGID=0x0419;CP=1251;COUNTRY=0"); // DDL - запрос на создание таблицы // описание языка DDL (подмножество SQL) смотрите в хелпе по MS Access // не пытайтесь делать это с другими форматами - DDL через DAO поддерживается только для MDB //Создадим еще таблицу db.Execute("CREATE TABLE BANKS |(REC_IND INTEGER, |BANKCODE INTEGER, |BANKNAME TEXT , |ModifiedFlg BIT, |ChangeSeqFlg BIT);" ); // индекс на нужные поля db.Execute("CREATE INDEX REC_IND ON BANKS (REC_IND);"); Иначе // просто открываем базу данных в разделенном режиме db=wksp.OpenDataBase(КаталогПользователя()+"sr.mdb"); // и очищаем имеющиеся данные db.Execute("DELETE * FROM BANKS;"); КонецЕсли; // rs-это как раз сама таблица, куда мы будем добавлять записи rs=db.OpenRecordset("BANKS"); // добавление записи rs.AddNew(); // присвоение значений полям rs.REC_IND = "1"; rs.BANKCODE = "34"; rs.BANKNAME = "Инвест"; rs.ModifiedFlg = "1"; // запомним запись rs.Update(); // и так далее ... db.Close(); // закрытие базы данныхКонецПроцедуры