КАК записать данные в файл 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 это вроде как режим по умолчанию. Если кому то пригодится эта статья, буду очень рад, не тратьте время пользуйтесь.

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20643    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13735    13    48    

25

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

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

48000 руб.

24.04.2017    51031    101    165    

89

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

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

60000 руб.

05.10.2022    10774    13    8    

14

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

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

84000 руб.

19.08.2020    25036    23    1    

25

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

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

10200 руб.

24.06.2021    20693    57    53    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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. Mainframe1C 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 49 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 198 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
Оставьте свое сообщение