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

Устранение Ошибки 216 в Delphi 10.2 Tokyo при Подключении к SQL через DLL

Delphi , Базы данных , SQL

Вопрос, который мы рассмотрим, связан с ошибкой 216, возникающей при работе с SQL-базами данных через динамически загружаемую библиотеку (DLL) в среде Delphi 10.2 Tokyo. Эта проблема известна уже несколько лет и связана с последовательным освобождением драйверов dbExpress, что приводит к ошибке доступа при закрытии последнего драйвера, если был выполнен открытие соединения с базой данных.

Описание проблемы

Ошибка 216 возникает при вызове метода FMethodTable.FDBXBase_Close(FDriverHandle), который не обрабатывает исключения, что приводит к сбою в программе, использующей DLL.

Пример кода DLL

Код функции CheckConnection в модуле Unit7 DLL выглядит следующим образом:

unit Unit7;
interface
uses
  System.SysUtils, Data.SqlExpr, Data.DBXMSSQL;
function CheckConnection(const ServerName, DatabaseName, UserName, Password: PAnsiChar): Boolean; stdCall export;
implementation
function CheckConnection(const ServerName, DatabaseName, UserName, Password: PAnsiChar): Boolean; stdCall export;
var
  SQLConnection: TSQLConnection;
begin
  SQLConnection := TSQLConnection.Create(nil);
  try
    // Настройка параметров соединения
    SQLConnection.Open;
    // Проверка состояния соединения
  finally
    SQLConnection.Close;
    FreeAndNil(SQLConnection);
  end;
end.

Вызов функции DLL из главного приложения

Для вызова функции CheckConnection используется следующий код в обработчике события нажатия кнопки:

procedure TForm8.Button1Click(Sender: TObject);
var
  Server, Database, User, Password: AnsiString;
begin
  // Получение параметров соединения
  if CheckConnection(...then // Проверка соединения и вывод результата
end;

Подтвержденный ответ

Проблема была решена путем добавления параметра AutoUnloadDriver=True в блок [MSSQL] файла dbxdrivers.ini. Это позволяет избежать проблем с порядком освобождения драйверов. Также DevArt добавили поддержку этого параметра в свой драйвер для SQL Server, предоставив ночную сборку с исправлением.

Альтернативный ответ

Также было получено сообщение от Embarcadero о том, что добавление параметра AutoUnloadDriver=True в настройки драйвера может помочь в решении проблемы с ошибкой 216. Этот параметр нужно добавить в соответствующие разделы файла dbxdrivers.ini.

Рекомендации

  1. Проверьте версию используемых драйверов и убедитесь, что они актуальны.
  2. Проверьте настройки файла dbxdrivers.ini, возможно, потребуется добавить параметр AutoUnloadDriver=True в нужные разделы.
  3. После внесения изменений перекомпилируйте проект и проверьте работоспособность соединения.

Заключение

Ошибка 216 в Delphi 10.2 Tokyo при работе с DLL может быть устранена путем корректной настройки порядка освобождения драйверов dbExpress и использования актуальных версий драйверов. Следуя рекомендациям и внедряя предложенные изменения, вы сможете избежать данной ошибки и обеспечить стабильную работу своего приложения.

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

должно быть представлено одним предложением, описывающим суть проблемы и условия ее возникновения в среде Delphi 10.2 Tokyo при работе с SQL через DLL, а именно устранение ошибки 216, связанной с неправильным порядком о


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

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




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


:: Главная :: SQL ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 13:48:17/0.005302906036377/1