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

Как подключиться к удаленной базе данных Firebird 2.5 через FireDAC в Delphi 12.2 Enterprise и создать ее при отсутствии

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

Подключение к удаленной базе данных Firebird через FireDAC в Delphi

В среде разработки Delphi, особенно при использовании FireDAC для работы с базами данных Firebird, часто возникает задача подключения к удаленной базе данных, а также ее автоматического создания, если она отсутствует. В этой статье мы рассмотрим проблему, с которой столкнулся разработчик при попытке подключения к удаленной базе данных Firebird 2.5 через FireDAC в Delphi 12.2 Enterprise, и предложим решение, основанное на предоставленном коде и комментариях.

Проблема:

Разработчик столкнулся с тем, что при указании IP-адреса удаленного сервера Firebird в параметре Server и пути к базе данных на этом сервере в параметре Database, FireDAC игнорировал параметр Server и пытался подключиться к локальной базе данных, даже если она уже существовала.

Решение:

Предоставленный код демонстрирует решение, которое заключается в явном присваивании параметров соединения из объекта TFDConnectionDef в объект TFDConnection перед установкой соединения.

//does our definition exist?
oDef := FDManager.ConnectionDefs.FindConnectionDef(FConDefName);
if not Assigned(oDef) then begin
  //no; create it
  oDef := FDManager.ConnectionDefs.AddConnectionDef;
  oDef.Name := FConDefName;

  //build params
  oParams := TFDPhysFBConnectionDefParams(oDef.Params);
  with oParams do begin
    DriverID := 'FB';
    Pooled   := FPooled;
    Protocol := ipTCPIP;
    Server   := FDBHost;
    Database := FDBName;
    UserName := 'sysdba';
    Password := 'masterkey';
    OpenMode := omOpenOrCreate;
  end;

  //apply the changes
  oDef.MarkPersistent;
  oDef.Apply;
end;

//connect to the FDB if we can
try
  dbConn.ConnectionDefName := FConDefName;

  //these two lines should not be necessary!!
  oParams := TFDPhysFBConnectionDefParams(oDef.Params);
  dbConn.Params.Assign(oParams);

  dbConn.Connected := True;
except
  on E:Exception do begin
    //save the error msg and re-raise
    FLastError := E.Message;
    raise;
  end;
end;

Объяснение решения:

  1. Создание или поиск определения соединения (TFDConnectionDef): Код сначала проверяет, существует ли определение соединения с заданным именем (FConDefName). Если нет, то создается новое определение и заполняется необходимыми параметрами, такими как DriverID, Protocol, Server, Database, UserName, Password и OpenMode. Важно установить OpenMode в omOpenOrCreate, чтобы Firebird создавал базу данных, если она не существует.
  2. Присвоение параметров соединения (TFDConnection.Params.Assign): После выбора или создания определения соединения, параметры из TFDConnectionDef явно присваиваются параметрам TFDConnection. Это обходит, по-видимому, существующую проблему в FireDAC, где параметры из TFDConnectionDef не всегда корректно применяются к TFDConnection.
  3. Установка соединения (TFDConnection.Connected := True): После присвоения параметров устанавливается соединение с базой данных.

Альтернативное решение (с использованием строки соединения):

Вместо использования TFDConnectionDef, можно напрямую использовать строку соединения (connection string) в TFDConnection. Этот подход может быть проще, если вам не нужно сохранять определения соединений.

uses
  FireDAC.Comp.Client, FireDAC.Phys.FB;

procedure ConnectToRemoteDB(const AHost, AFDB: String);
var
  FDConnection: TFDConnection;
  ConnectionString: string;
begin
  FDConnection := TFDConnection.Create(nil);
  try
    // Формируем строку соединения
    ConnectionString := 'DriverID=FB;Protocol=TCPIP;' +
                       'Server=' + AHost + ';' +
                       'Database=' + AFDB + ';' +
                       'User_Name=sysdba;Password=masterkey;' +
                       'OpenMode=OpenOrCreate';

    FDConnection.Params.Text := ConnectionString;

    try
      FDConnection.Connected := True;
      // ... дальнейшая работа с базой данных ...
    except
      on E: Exception do
        ShowMessage('Ошибка подключения: ' + E.Message);
    end;
  finally
    FDConnection.Free;
  end;
end;

Объяснение альтернативного решения:

  1. Создание TFDConnection: Создается экземпляр компонента TFDConnection.
  2. Формирование строки соединения: Формируется строка соединения, содержащая все необходимые параметры, включая DriverID, Protocol, Server, Database, User_Name, Password и OpenMode. Обратите внимание на OpenMode=OpenOrCreate, который обеспечивает создание базы данных, если она не существует.
  3. Присвоение строки соединения: Строка соединения присваивается свойству FDConnection.Params.Text.
  4. Установка соединения: Устанавливается соединение с базой данных.

Важные замечания:

  • Убедитесь, что на удаленном сервере Firebird разрешены подключения по TCP/IP. Проверьте конфигурацию firebird.conf.
  • Проверьте, что порт Firebird (обычно 3050) открыт в брандмауэре на удаленном сервере.
  • Убедитесь, что версия FireDAC совместима с версией Firebird.
  • Убедитесь, что модуль FireDAC.Phys.FB подключен в секции uses.

Заключение:

Подключение к удаленной базе данных Firebird через FireDAC в Delphi может потребовать явного присвоения параметров соединения из объекта TFDConnectionDef в объект TFDConnection или использования строки соединения. При правильной настройке и использовании OpenMode=OpenOrCreate, FireDAC автоматически создаст базу данных на удаленном сервере, если она не существует. Важно помнить о настройках Firebird и брандмауэра на удаленном сервере, чтобы обеспечить успешное подключение.

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

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


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

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




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


:: Главная :: Interbase ::


реклама


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

Время компиляции файла: 2024-12-22 17:14:06
2025-12-07 07:47:15/0.0052900314331055/0