Distribuindo uma aplicação com Firebird

Ultimamente tenho recebido alguns e-mails com dúvidas relacionadas à distribuição de aplicações desenvolvidas com banco de dados Firebird. Embora eu tenha respondido os e-mails, achei importante compartilhar essa informação aqui no blog também! Caso outros desenvolvedores tenham a mesma dúvida e encontrem o blog via mecanismos de busca, espero que este artigo sirva como orientação.

Introdução

Infelizmente, não basta apenas copiar os arquivos para o PC do usuário. Além do executável e do arquivo do banco de dados, é necessário distribuir as bibliotecas e os arquivos de configuração utilizados pela aplicação. A seguir, apresento duas modalidades de distribuição de uma aplicação desenvolvida em Delphi com banco de dados Firebird. É bom ressaltar que essas modalidades funcionam apenas para projetos desenvolvidos com os componentes da paleta dbExpress. Para outros conjuntos (IBX, FireDAC, UniDAC…), as bibliotecas podem ser diferentes.

1) Instalação do client do Firebird no computador do usuário

Nessa modalidade, é necessário levar o instalador do Firebird para executar no computador do cliente. Porém, ao invés de rodar a instalação completa, certifique-se de apenas de selecionar a opção que instala os arquivos essenciais (instalação mínima), conforme a imagem abaixo:

Instalação mínima do FirebirdInstalação mínima do Firebird

Esse tipo de instalação já é o suficiente para registrar o Firebird no Windows como serviço ou aplicação e adicionar um ícone no painel de controle para controlar o status de execução. Como padrão, a instalação já configura o Firebird para ser executado ao iniciar o Windows.
Além da instalação, o desenvolvedor precisa incluir os seguintes arquivos na distribuição do software:

  • Executável da aplicação (.exe);
  • Banco de dados (.fdb);
  • Biblioteca de conexão: dbexpint.dll no Delphi 7 ou dbxfb.dll no Delphi XE+;
  • Biblioteca do Firebird: gds32.dll no Delphi 7 ou fbclient.dll no Delphi XE+;
  • midas.dll;
  • Arquivos de configuração, caso necessários (INI, TXT, XML).

2) Utilização da versão embarcada do Firebird

Também conhecida como “embedded” (embarcado em inglês), essa modalidade dispensa a instalação do Firebird Client no computador do cliente. Ao invés disso, o desenvolvedor distribui uma biblioteca especial que se comporta como servidor no sistema operacional. Esse pacote do Firebird pode ser encontrado gratuitamente neste link (arquivo compactado).

Caso o desenvolvedor opte por essa modalidade, os arquivos abaixo devem ser distribuídos:

  • Executável da aplicação (.exe);
  • Banco de dados (.fdb);
  • Biblioteca de conexão: dbexpint.dll no Delphi 7 ou dbxfb.dll no Delphi XE+;
  • midas.dll;
  • icudt30.dll;
  • icuuc30.dll;
  • Arquivos de configuração, caso necessários (INI, TXT, XML).

E o mais importante: na pasta do Firebird Embedded há um arquivo chamado fbembed.dll. Se estiver utilizando o Delphi 7, renomeie este arquivo para gds32.dll ou, no caso do Delphi XE+, renomeie para fbclient.dll. Feito isso, inclua esse arquivo na distribuição também.

Pronto! Ao empregar uma das modalidades acima, a aplicação já poderá ser executada no cliente!

Diferença entre as modalidades

Certa vez, li em alguns sites que o Firebird embarcado é mais lento que o Firebird Client, porém, ainda não tive a oportunidade de medir o desempenho das duas versões. Portanto, não garanto que essa informação é verídica. Até o momento, só tenho utilizado o Firebird Client nas minhas distribuições.

Caminho do banco de dados

Alguns desenvolvedores “fixam” o caminho do banco de dados no TSQLConnection (componente de conexão) em tempo de projeto. Isso implica que, ao distribuir a aplicação para o computador do cliente, é necessário que a mesma hierarquia de pastas utilizada no computador do desenvolvedor seja criada no computador do usuário. Logo, se o desenvolvedor utilizar o diretório C:\Meus Sistemas\Aplicativo\Banco.fdb e o fixar no TSQLConnection, este mesmo caminho deverá ser criado no computador que executará a aplicação. Dependendo do nome das pastas, isso pode soar um pouco inadequado, não acha?

Para resolver isso, há duas alternativas eficientes. A primeira delas é configurar a aplicação para ler o banco de dados no mesmo diretório em que está o executável, utilizando o comando ExtractFilePath. No exemplo abaixo, se o executável estiver em C:\Aplicativo, ele irá procurar por C:\Aplicativo\Banco.fdb:

A segunda forma compreende a utilização de arquivos INI para manter a aplicação dinâmica, ou seja, é possível alterar o caminho do banco de dados sem a necessidade de modificar o executável. Por exemplo, o desenvolvedor pode configurar a aplicação para ler o arquivo INI, obter o caminho do banco de dados e atribuí-lo ao TSQLConnection durante a inicialização.

Na prática, a estrutura do arquivo INI poderia ser dessa forma:

No Delphi, em algum evento de inicialização (recomendo o evento OnBeforeConnect do TSQLConnection), basta utilizar este código:

Para mais detalhes sobre como manipular arquivos INI pelo Delphi, confira o artigo neste link.

Bônus: Inno Setup

Se você utiliza o Inno Setup para criar instaladores das suas aplicações, saiba que existe uma linha de comando do Firebird que permite a instalação silenciosa sem intervenção alguma do usuário:

Basta configurar essa linha de comando para ser executada durante a instalação da aplicação. No entanto, claro, é necessário que o instalador do Firebird seja incluído no instalador da aplicação principal, resultando em um arquivo um pouco maior.

 

Pessoal, espero que artigo tenha sido útil!
Obrigado pela visita e até a próxima semana!


André Celestino