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

Переход на FireDAC из Advantage: Настройка Подключения к Серверу

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

Переход на FireDAC из Advantage: Настройка Подключения к Серверу

Переход на новые технологии всегда сопровождается рядом вопросов и задач, которые необходимо решить для обеспечения совместимости и корректной работы приложений. Вопрос перехода с Advantage Native Delphi компонентов на FireDAC является актуальным для разработчиков, использующих язык программирования Object Pascal и среду разработки Delphi.

Проблема и Задача

Gary Conley столкнулся с необходимостью миграции с Advantage на FireDAC и ищет способ определения типа соединения с сервером, аналогичного свойству TAdsConnection.ConnectionType в Advantage. Это важно для понимания, используется ли локальное соединение, удаленное или соединение через интернет (AIS).

Решение и Пример Кода

Для решения данной задачи можно использовать функцию AdsGetConnectionType, которая присутствует в модуле FireDAC.Phys.ADSCli, но не используется напрямую. Ниже приведен пример кода, который позволяет вызвать эту функцию:

uses
  FireDAC.Stan.Consts, FireDAC.Phys.ADSCli, FireDAC.Phys.ADSWrapper;

var
  FTAdsGetConnectionType: TAdsGetConnectionType = nil;

type
  TADSLib = class(FireDAC.Phys.ADSWrapper.TADSLib)
  end;

function GetConnectionType(Connection: TFDConnection): Word;
const
  AdsGetConnectionTypeName = 'AdsGetConnectionType';
var
  CliLib: TADSLib;
  CliCon: TADSConnection;
  Status: UNSIGNED32;
  Output: UNSIGNED16;
begin
  Result := 0;
  CliCon := TADSConnection(Connection.CliObj);
  CliLib := TADSLib(CliCon.Lib);

  if not Assigned(FTAdsGetConnectionType) then
    FTAdsGetConnectionType := CliLib.GetProc(AdsGetConnectionTypeName);

  if Assigned(FTAdsGetConnectionType) then
  begin
    Status := FTAdsGetConnectionType(CliCon.Handle, @Output);
    if Status = AE_SUCCESS then
      Result := Word(Output)
    else
      FDException(CliLib.OwningObj, EADSNativeException.Create(Status, CliLib, nil),
        {$IFDEF FireDAC_Monitor}True{$ELSE}False{$ENDIF});
  end
  else
    FDException(CliLib.OwningObj, [S_FD_LPhys, CliLib.DriverID],
      er_FD_AccCantGetLibraryEntry, [AdsGetConnectionTypeName]);
end;

var
  FDConnection1: TFDConnection;
begin
  // Инициализация FDConnection1
  // ...

  case GetConnectionType(FDConnection1) of
    ADS_AIS_SERVER: ShowMessage('AIS server');
    ADS_LOCAL_SERVER: ShowMessage('Local server');
    ADS_REMOTE_SERVER: ShowMessage('Remove server');
  end;
end.

Заключение

Приведенный пример демонстрирует, как можно обойти отсутствие прямого вызова функции AdsGetConnectionType в FireDAC, используя динамическое связывание с библиотекой. Это позволяет разработчикам, знакомым с Object Pascal и средой Delphi, продолжить работу с новыми компонентами FireDAC, сохраняя при этом совместимость и функциональность своих приложений.

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

Переход на использование FireDAC вместо Advantage в Delphi-приложениях требует настройки подключения к серверу и определения типа соединения, аналогичного тому, что было доступно в Advantage.


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

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




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


:: Главная :: База данных ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 00:26:49/0.00301194190979/0