КАК записать данные в файл access (*.mdb)

06.08.10

Интеграция - Внешние источники данных

Как осуществить запись в файлы базы Access

Столкнулся с такой проблемой: есть обработки по выгрузке данных из Access, а вот по добавлению данных в файлы mdb так ничего путевого и не выискал поэтому стал разбираться. Задача встала следующая у организации зарплатный проект в банке и информация для банка должна забиваться в файл базы Access, ну и конечно никто ручками из 1С перебивать все в базу не собирается. Вроде почти во всем разобрался, но осталась единственная проблема - запись добавляется, но в базе не сохраняется.

Если кто сталкивался и знает, в чем ошибка, просьба подсказать. Сам код ниже:

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Путь + ";""";
Connection = Новый COMОбъект("ADODB.Connection");

Попытка
   Connection.Open(СтрокаПодключения);
Исключение
   Сообщить(ОписаниеОшибки());
   Возврат;
КонецПопытки;

//команда в принципе не понадобилась
Command = Новый COMОбъект("ADODB.Command");

Command.ActiveConnection = Connection;
Command.CommandText = "SELECT * FROM ZAO_UCB";
Command.CommandType = 1;

rs = Новый COMОбъект("ADODB.RecordSet");

strSQL = "ZAO_UCB";

//а здесь как раз открываем наши recordset
rs.Open(strSQL,СтрокаПодключения,0,4);

// переборка записей базы так посмотреть что все доступно
Пока rs.EOF() = 0 Цикл
    rs.MoveNext(); 
КонецЦикла;


// при добавлении записи вроде проблем не возникло - в отладчике запись добавилась в базу
rs.AddNew();

// присвоение значений полям
Для Каждого KL Из rs.Fields Цикл
    Если KL.Name = "VISAELC" Тогда
        KL.Value = 1;
    ИначеЕсли KL.Name = "CURRACC" Тогда
        KL.Value = 0;  
    ИначеЕсли KL.Name = "CORPNUM" Тогда
        KL.Value = "12345";
    ИначеЕсли KL.Name = "CITIZENS" Тогда
        KL.Value = "Российская Федерация"; 
    ИначеЕсли KL.Name = "ACCRUR" Тогда
        KL.Value = 1;
    КонецЕсли;
КонецЦикла;
  
// запомним запись и тут вроде все нормально запись есть
rs.Update();

rs.Close();
Connection.Close();

И после всего это при открытии базы в Access записи как не бывало. В чем загвоздка не пойму.


Все заработало, когда в строке rs.Open(strSQL,СтрокаПодключения,0,4); изменил 4 на 2. Это режим в котором открывается база и видимо при 2 запись возможна, хотя 4 это вроде как режим по умолчанию. Если кому то пригодится эта статья, буду очень рад, не тратьте время пользуйтесь.

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22452    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9212    9    8    

10

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48707    97    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81570    128    123    

147

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    30004    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

7200 руб.

24.06.2021    19130    52    50    

29
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. combatxp 88 06.08.10 09:00 Сейчас в теме
5. AlekseiLeit 9 16.03.12 19:14 Сейчас в теме
//кусок моего кода
CustomersRecordSet.CursorLocation = 1;
CustomersRecordSet.LockType = 4;
CustomersRecordSet.Source = "Customers";
CustomersRecordSet.Open("Customers");
//кусок моего кода

судя по моему коду в Вашем случае 0 - это расположение курсора в текущей позиции

а вот LockType. Это свойство определяет тип блокировок, которые будут наложены на записи на источнике, помещенные в Recordset. Можно использовать следующие значения:

adLockReadOnly (1) - записи в Recordset будут доступны только на чтение, вы не сможете их изменять. Это значение используется по умолчанию.

adLockPessimistic (2) - наиболее надежный с точки зрения целостности данных вид блокировки. Вы можете изменять записи в Recordset, но при начале изменения записи она блокируется на источнике таким образом, что другие пользователи не смогут обратиться к ней ни на чтение, ни на запись, пока вы не вызовете методы Update или CancelUpdate.

adLockOptimistic (3) - это значение позволяет выиграть в производительности за счет проигрыша в надежности обеспечения целостности данных. Запись на источнике блокируется только на время выполнения метода Update. Остальные пользователи могут одновременно с вами читать и изменять данные на источнике.

adLockBatchOptimistic (4) - то же самое, что обычное оптимистичное, но вместо немедленного обновления по одной записи используется пакетное обновление. В ситуации, когда изменяется большое число записей, такое решение позволяет выиграть в производительности.

так что 4 тоже подойдет
bakhrooom; +1 Ответить
7. jurgal1C 03.05.13 21:52 Сейчас в теме
(5) AlekseiLeit, а в параметрах можно ставить и цифру, и строковое значение? т.е. либо 1, либо adLockReadOnly?
2. irzik 2 06.08.10 10:21 Сейчас в теме
Попробуйте вместо
rs.Open(strSQL,СтрокаПодключения,0,4);
писать
rs.Open(strSQL,Connection ,3,3);


Делала выгрузку под 1с?7, поэтому назначение параметров уже не помню
bakhrooom; jacksonp; +2 Ответить
3. jacksonp 48 06.08.10 15:38 Сейчас в теме
Да всем спасибо кто откликнулся и внес свои комментарии
4. box144a 09.08.10 15:57 Сейчас в теме
Пример из 7-ки. Практически без переделок пойдет для 8-ки:
Попытка
DBConn = CreateObject("ADODB.Connection");
DBConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + СокрЛП(Константа.КаталогБазыAccess) + "\1c.mdb;Jet OLEDB:System database=" + СокрЛП(Константа.КаталогБазыAccess) + "\KI_New1.mdw; User Id=synchronizer;Password=123456;");
Исключение
Сообщить("Невозможно установить соединение с Access");
Сообщить(ОписаниеОшибки(), "!!!");
СтатусВозврата(0);
Возврат;
КонецПопытки;
//сама команда
//для обновления записи
DBConn.Execute("UPDATE mytable SET sent_to_client = #"+датаСинхронизации+"# WHERE (iiob_id="+Строка(ИдОбъектаAccess)+")");
//для добавления
DBConn.Execute("Insert Into mytatle (id, status_obgr, user_name) values("+Строка(ИдСчета)+","+Строка(345)+",'synchronizer'"+")");

6. akor77 197 08.03.13 13:27 Сейчас в теме
То что мне сейчас нужно, благодарю.
8. AlekseiLeit 9 06.05.13 10:39 Сейчас в теме
Ну эт нужно попробовать)), проверьте..я бы поставил цифру и не парился
9. e-9 60 04.04.16 15:04 Сейчас в теме
А я, после долгих свистоплясок с ADODB, сделал на DAO (спасибо коллегам)!
Когда одна табличка пишется - все прекрасно работало и на ADODB, но когда после записи в одну таблицу (Накладные), надо было писать записи в подчиненную (ПродукцияНакладных) - сыпались блокировки (при Update рекордсета второй, связанной, таблицы). Причем, блокировки сыпались не сразу - какая-то часть данных записывалась, что еще больше сбивало с толку.

Не помогла и переделка на Execute("INSERT INTO..." бла-бла-бла, вместо ВторойРекордсет.AddNew()...
Спасло DAO:
dbe = Новый COMОбъект("DAO.DBEngine.36");
wksp = dbe.Workspaces(0);
db = wksp.OpenDataBase(ПутьКФайлу,0,0,);

ТаблицаНакладная = db.openRecordSet("Накладная");
ТаблицаНакладнаяПр = db.openRecordSet("ПродукцияНакладных");

а дальше все как с ADODB
Оставьте свое сообщение