При попытке зарегистрировать библиотеку sqlite3.dll в операционной системе Windows с помощью системной утилиты regsvr32 разработчики часто сталкиваются с ошибкой: «Модуль sqlite3.dll загружен, но точка входа DllRegisterServer не найдена». Попытка создания объекта через конструкцию Новый COMОбъект("LiteX.LiteConnection") при этом завершается ошибкой «Недопустимая строка с указанием класса».
Разберем подробно причины такого поведения, выясним, как правильно работать с устаревшими COM-обертками и какими современными способами можно организовать обмен данными между 1С и 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-обертку, важно учитывать разрядность операционной системы и клиентского приложения 1С. Разберем по шагам правила регистрации 32-разрядных COM-библиотек в 64-битной Windows:
SysWOW64, указав полный путь к вашей COM-библиотеке:
C:\Windows\SysWOW64\regsvr32.exe "C:\Path\To\LiteX.dll"
Новый COMОбъект без настройки внешнего COM+ приложения (DLL Surrogate).Рассмотрим надежный и проверенный способ работы с 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();
В платформе 1С:Предприятие 8 реализован штатный механизм интеграции — Внешние источники данных. После установки SQLite ODBC Driver в операционной системе мы можем настроить связь с файлом SQLite прямо в дереве метаданных конфигурации.
Современным стандартом расширения функционала платформы является технология Native API. Внешние компоненты, разработанные по этой спецификации, не требуют прав администратора и регистрации через regsvr32.
Подключение выполняется штатными методами платформы:
// Подключение внешней компоненты из макета или файла
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаSQLite", "SQLiteAddIn", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
ОбъектSQLite = Новый("AddIn.SQLiteAddIn.SQLiteExtension");
// Вызов методов компоненты для работы с БД
КонецЕсли;
Если требуется выполнять регламентные выгрузки, импорт или разовые запросы без необходимости постоянного открытого соединения, проанализируем вариант работы через консольную утилиту 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.