Переход на 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.