Почему sqlite3.dll не регистрируется через regsvr32 и как подключить SQLite к 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке зарегистрировать библиотеку sqlite3.dll в операционной системе Windows с помощью системной утилиты regsvr32 разработчики часто сталкиваются с ошибкой: «Модуль sqlite3.dll загружен, но точка входа DllRegisterServer не найдена». Попытка создания объекта через конструкцию Новый COMОбъект("LiteX.LiteConnection") при этом завершается ошибкой «Недопустимая строка с указанием класса».

Разберем подробно причины такого поведения, выясним, как правильно работать с устаревшими COM-обертками и какими современными способами можно организовать обмен данными между 1С и SQLite.

Причина ошибки: архитектура стандартной библиотеки SQLite

Проанализируем природу самой библиотеки. Официальная сборка sqlite3.dll, скачиваемая с сайта разработчиков SQLite, представляет собой стандартную динамическую библиотеку языка C (C-API). Она не является сервером автоматизации COM (ActiveX DLL).

Для успешной регистрации через regsvr32 библиотека обязана содержать экспортируемые функции DllRegisterServer и DllUnregisterServer, которые вносят информацию о классах в системный реестр Windows. В стандартной sqlite3.dll эти функции отсутствуют, поэтому зарегистрировать её как COM-объект невозможно.

Программный идентификатор LiteX.LiteConnection относится к сторонней надстройке-обертке LiteX. Если в коде 1С вызывается этот COM-объект, регистрировать необходимо именно специальную DLL-библиотеку обертки (которая может содержать COM-интерфейсы), а не стандартный файл движка SQLite.

Особенности регистрации COM-компонент в 64-битной Windows

Если вы продолжаете использовать старую COM-обертку, важно учитывать разрядность операционной системы и клиентского приложения 1С. Разберем по шагам правила регистрации 32-разрядных COM-библиотек в 64-битной Windows:

  1. Открываем командную строку от имени администратора.
  2. Запускаем 32-битную версию утилиты регистрации, расположенную в системном каталоге SysWOW64, указав полный путь к вашей COM-библиотеке: C:\Windows\SysWOW64\regsvr32.exe "C:\Path\To\LiteX.dll"
  3. Учитываем разрядность клиента 1С: 32-битный COM-объект может быть напрямую вызван только из 32-разрядного клиента или сервера 1С. 64-разрядный процесс 1С не сможет напрямую создать 32-битный экземпляр через Новый COMОбъект без настройки внешнего COM+ приложения (DLL Surrogate).

Альтернатива 1. Использование SQLite ODBC Driver через ADODB

Рассмотрим надежный и проверенный способ работы с SQLite без использования устаревших самописных оберток. Для этого устанавливается официальный драйвер SQLite ODBC Driver соответствующей разрядности (32 или 64 бит под разрядность используемого клиента/сервера 1С).

Посмотрим на пример подключения к базе SQLite и выполнения выборки данных с помощью стандартного объекта ADODB.Connection:


ПутьКБазеSQLite = "C:\Databases\my_database.db";

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=" + ПутьКБазеSQLite + ";";
Соединение.Open();

Команда = Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection = Соединение;
Команда.CommandText = "SELECT id, name, price FROM products WHERE price > ?";
Команда.Parameters.Append(Команда.CreateParameter("price", 3, 1, , 100)); // adInteger, adParamInput

Выборка = Команда.Execute();

Пока НЕ Выборка.EOF Цикл
    Идентификатор = Выборка.Fields("id").Value;
    Наименование  = Выборка.Fields("name").Value;
    Цена          = Выборка.Fields("price").Value;
    
    // Обработка полученных данных
    Выборка.MoveNext();
КонецЦикла;

Выборка.Close();
Соединение.Close();

Альтернатива 2. Механизм внешних источников данных

В платформе 1С:Предприятие 8 реализован штатный механизм интеграции — Внешние источники данных. После установки SQLite ODBC Driver в операционной системе мы можем настроить связь с файлом SQLite прямо в дереве метаданных конфигурации.

  1. В дереве конфигурации добавляем новый Внешний источник данных.
  2. Указываем строку подключения с использованием драйвера SQLite ODBC.
  3. Добавляем таблицы внешнего источника данных (вручную или через мастер импорта таблиц).
  4. Работаем с таблицами SQLite с помощью стандартных запросов на языке 1С без использования прямого COM-взаимодействия.

Альтернатива 3. Подключение внешних компонент Native API

Современным стандартом расширения функционала платформы является технология Native API. Внешние компоненты, разработанные по этой спецификации, не требуют прав администратора и регистрации через regsvr32.

Подключение выполняется штатными методами платформы:


// Подключение внешней компоненты из макета или файла
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаSQLite", "SQLiteAddIn", ТипВнешнейКомпоненты.Native);

Если РезультатПодключения Тогда
    ОбъектSQLite = Новый("AddIn.SQLiteAddIn.SQLiteExtension");
    // Вызов методов компоненты для работы с БД
КонецЕсли;

Альтернатива 4. Пакетная работа через консольную утилиту sqlite3.exe

Если требуется выполнять регламентные выгрузки, импорт или разовые запросы без необходимости постоянного открытого соединения, проанализируем вариант работы через консольную утилиту sqlite3.exe.

Утилита позволяет выполнять SQL-скрипты и сохранять результаты в текстовом виде (например, в формате JSON или CSV), которые затем легко разбираются встроенными средствами 1С:


ПутьКУтилите = "C:\SQLite\sqlite3.exe";
ПутьКБазе    = "C:\Databases\my_database.db";
ПутьКВыгрузке = "C:\Temp\output.json";

// Команда выгрузки результата в формате JSON
КомандаЗапуска = СтрШаблон("%1 ""%2"" "".mode json"" "".output %3"" ""SELECT * FROM goods;""", ПутьКУтилите, ПутьКБазе, ПутьКВыгрузке);

ЗапуститьПриложение(КомандаЗапуска, , Истина);

// Чтение сформированного файла в 1С
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ПутьКВыгрузке);
ДанныеИзSQLite = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Итоги

Попытка зарегистрировать sqlite3.dll через regsvr32 лишена смысла из-за отсутствия в ней COM-интерфейсов. Для стабильной работы 1С с базой данных SQLite рекомендуется отказаться от устаревших COM-библиотек вроде LiteX в пользу SQLite ODBC Driver, штатных Внешних источников данных или нативных компонент Native API.

← На главную