Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблемы с FireDAC и шифрованием SQLite после обновления до RAD Studio 12.3: решения и обходные пути

Delphi , Базы данных , Ошибки БД

 

Введение

С выходом RAD Studio 12.3 некоторые разработчики, использующие FireDAC с SQLite и шифрованием (FDE — FireDAC Encryption), столкнулись с проблемами, включая Access Violation. В этой статье мы разберём причины этих ошибок, предложим решения и альтернативные подходы к работе с шифрованием в SQLite.

Проблема: Access Violation при использовании FireDAC.Phys.SQLiteWrapper.FDEStat

Как отмечает пользователь FT_Uhu, после перехода на RAD Studio 12.3 возникает ошибка доступа к памяти (Access Violation) при использовании FireDAC Encryption с SQLite 3.31.1.

Причины:
1. В RAD Studio 12.0 была добавлена поддержка SQLite 3.42, но механизм шифрования FireDAC (FDE) перестал работать в новых версиях SQLite.
2. В некоторых модулях проекта автоматически подключался FireDAC.Phys.SQLiteWrapper.Stat, что вызывало конфликт с FireDAC.Phys.SQLiteWrapper.FDEStat.

Решение проблемы

1. Удаление конфликтующих модулей

Как выяснил FT_Uhu, ошибка исчезает, если вручную убрать FireDAC.Phys.SQLiteWrapper.Stat из всех модулей и создавать подключение к БД в коде, а не через дизайнер форм.

Пример кода для создания подключения:

uses
  FireDAC.Phys.SQLiteWrapper.FDEStat, // Только для FDE
  FireDAC.Phys.SQLite, 
  FireDAC.Stan.Def, 
  FireDAC.Comp.Client;

var
  Conn: TFDConnection;
begin
  Conn := TFDConnection.Create(nil);
  try
    Conn.Params.Values['DriverID'] := 'SQLite';
    Conn.Params.Values['Database'] := 'C:\Data\encrypted.db';
    Conn.Params.Values['Encrypt'] := 'aes-256'; // Включаем шифрование
    Conn.Connected := True;
    // Далее работаем с запросами через TFDQuery
  finally
    Conn.Free;
  end;
end;

2. Использование условной компиляции для совместимости

Patrick PREMARTIN предложил решение с условной компиляцией, чтобы код работал в разных версиях Delphi:

{$IF CompilerVersion >= 36.0}  // Delphi 12 Athens
  FireDAC.Phys.SQLiteWrapper.FDEStat,
{$ELSE IF CompilerVersion >= 34.0}  // Delphi 10.4 Sydney
  FireDAC.Phys.SQLiteWrapper.Stat,
{$ELSE}
  FireDAC.Phys.SQLiteWrapper,
{$IFEND}

Этот подход позволяет автоматически выбирать нужный модуль в зависимости от версии компилятора.

Альтернативные варианты шифрования SQLite

Если FireDAC Encryption больше не поддерживается в новых версиях SQLite, можно рассмотреть альтернативы:

1. Использование SQLite EE (Enterprise Edition)

SQLite EE поддерживает встроенное шифрование, но требует лицензии.

2. Переход на SQLite 3.31.1

Если шифрование FDE критично, можно продолжить использовать старую версию SQLite:

Conn.Params.Values['SQLiteAdvanced'] := 'Database=3.31.1';

3. Шифрование данных на уровне приложения

Вместо шифрования БД можно применять алгоритмы (AES, Blowfish) к данным перед сохранением:

uses
  DCPcrypt2, DCPrijndael;

function EncryptData(const AData, AKey: string): string;
var
  Cipher: TDCP_rijndael;
begin
  Cipher := TDCP_rijndael.Create(nil);
  try
    Cipher.InitStr(AKey, TDCP_sha256);
    Result := Cipher.EncryptString(AData);
    Cipher.Burn;
  finally
    Cipher.Free;
  end;
end;

Заключение

Проблема с Access Violation в RAD Studio 12.3 решается удалением конфликтующих модулей или использованием условной компиляции. Если FireDAC Encryption не подходит, можно перейти на SQLite EE или реализовать шифрование данных вручную.

Рекомендация:
- Проверьте все uses в проекте на наличие FireDAC.Phys.SQLiteWrapper.Stat.
- Если возможно, обновите SQLite и используйте нативные методы шифрования.
- Для кросс-версионной совместимости применяйте условную компиляцию.

Надеюсь, эта статья поможет вам решить проблему и выбрать оптимальный подход к шифрованию в SQLite!

Создано по материалам из источника по ссылке.

Проблемы с FireDAC и шифрованием SQLite после обновления RAD Studio 12.3, включая Access Violation, и возможные решения, такие как удаление конфликтующих модулей, условная компиляция или альтернативные методы шифрования.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки БД ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-01 03:04:24/0.0035569667816162/0