Работа с устаревшими форматами баз данных, такими как Paradox, часто ставит перед разработчиком 1С нестандартные задачи. Основная сложность заключается в том, что современные операционные системы и механизмы ADO не всегда корректно взаимодействуют со структурой файлов .db, особенно если они содержат поля типа AutoInc (автоинкремент) или не имеют первичных ключей. Давайте разберем, как мы можем решить эту задачу поэтапно.
Прежде чем приступать к написанию кода, мы должны убедиться, что структура базы позволяет производить запись. Одной из частых проблем является отсутствие первичного ключа. Paradox требует наличия файла с расширением .PX для индексации и корректной работы операций INSERT и UPDATE.
Primary Key (первичный ключ) по ключевому полю, например, Cikl. Это приведет к созданию вспомогательного файла .PX, без которого ADO будет выдавать ошибку о невозможности выполнения операции.Для взаимодействия с базой из среды 1С мы будем использовать COMОбъект класса ADODB.Connection. Этот метод позволяет выполнять SQL-запросы к таблицам напрямую. Рассмотрим пример чтения данных из базы:
Conn = Новый COMОбъект("ADODB.Connection");
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\PROGRAMS\PDE;Persist Security Info=False;Extended properties='Paradox 7.x;HDR=YES'";
Попытка
Conn.Open();
Исключение
Сообщить("Не удалось подключиться к базе");
КонецПопытки;
ТекстЗапроса = "select Cikl, MyCikl, Name, Account from Debtors1.db";
cmdSQL = Новый COMОбъект("ADODB.Command");
cmdSQL.ActiveConnection = Conn;
cmdSQL.prepared = 1;
cmdSQL.CommandText = ТекстЗапроса;
Zapros = cmdSQL.Execute();
Пока Zapros.EOF = 0 Цикл
Сообщить(Zapros.Fields("Cikl").Value);
Zapros.MoveNext();
КонецЦикла;
Conn.Close();
Иногда мы сталкиваемся с ошибкой: поле, например Cikl, нельзя изменить, так как оно имеет тип AutoInc и защищено от записи. Если стандартные методы импорта не справляются, нам приходится прибегать к низкоуровневой модификации файла базы данных.
Один из рабочих методов — временное изменение типа поля через HEX-редактор:
.db файла. Например, по смещению 78h (120 десятичное) значение 16h может указывать на защищенное поле.04h, что делает поле доступным для записи.ADO или импорта CSV, мы возвращаем исходное значение байта 16h, чтобы восстановить целостность структуры.Чтобы не делать это вручную, мы можем реализовать алгоритм «костыля» непосредственно в 1С:
ЧтениеДвоичныхДанных и ЗаписьДвоичныхДанных для открытия файла .db.SQL-запрос на вставку данных через ADODB.Command.Важно: Всегда делайте резервную копию файла базы данных перед выполнением любых манипуляций с двоичными данными. Работа с заголовками файлов на низком уровне несет риск повреждения базы, если алгоритм будет выполнен некорректно.
Таким образом, комбинируя ADODB для SQL-запросов и методы работы с двоичными данными для обхода ограничений структуры, мы получаем надежный инструмент для обмена данными между современной 1С и устаревшей базой данных Paradox.