Banco de Dados - FirebirdFeed de artigos deste autor

Criando uma aplicação "embarcada" com o Firebird

O Firebird é um banco de dados leve, rápido e bastante flexivel, uma dessas flexibilidades é a capacidade de "embarcar" aplicações com ele...

por Gladiston Santana



O Firebird é um banco de dados leve, rápido e bastante flexivel, uma dessas flexibilidades é a capacidade de "embarcar" aplicações com ele.

Como assim "embarcar" ? - Talvez voce pergunte.

"Embarcar" significa que voce pode criar um aplicativo e embutir o Firebird dentro de seu código de forma transparente e distribui-lo de forma fácil, basta executar seu aplicativo e pronto. Nenhuma instalação do Firebird será executada, ou configuração existente será mexida, nem mesmo será necessário parar o Firebird/Interbase que esteja executando naquele instante.

Vamos à um exemplo para ficar mais facil entender, digamos que precise distribuir um CDROM com um catalogo de preços, neste CDROM voce vai querer gravar seu aplicatibo e acessará os dados que estão gravados localmente no CDROM. Voce não quer utilizar um banco de dados flat-table como Paradox, Access ou DBF porque voce já possui o aplicativo criado para acessar os dados em Firebird/Interbase. A dificuldade seria na distribuição de tal aplicativo, pois força os usuários a instalar o Firebird/Interbase apenas para ver um CDROM pode ser o "fim-da-picada". Uma outra sugestão seria embutir dentro do seu aplicativo CatalogoEletronico.EXE o Firebird "Embeded" ou embutido, então nesse caso apenas a execução do CatalogoEletronico.EXE já seria auto-suficiente para acessar a base de dados no CDROM. Entendeu ?

Pode parecer dificil fazer isso a primeira vista, mas se voce perceberá neste artigo, o quão simples é, é tão simples que talvez voce deseje utiliza-los em todos os aplicativos que voce crie, porém de antemão devo lhe avisar que a versão embarcada do Firebird possui as seguintes características :

  • Apenas para acesso local (HD, CDROM,...) e não implementa nenhum acesso via protocolo de rede, mesmo "localhost" não funciona, por essa razão notará que a performance e o consumo de memoria serão otimizados quando seu aplicativo for executado;
  • Qualquer configuração do Firebird ou Interbase já instalado na máquina é ignorado, ou seja, não é preciso desinstalar nada ou parar o serviço, nada é modificado em configurações existentes, isso é um alívio para quem já estava acustumado a ter problemas quando tinha de distribuir o arcaico BDE. Para se ter uma idéia, o Firebird embarcado sequer faz uso de registry;
  • Na questão de segurança, a versão "embarcada" não implementa nenhum mecanismo de autenticação, a senha é ignorada, apesar disso se voce logar-se como "Pedro" e se este possuir certas restrições em tabelas, estas restrições serão respeitadas. Para quem deseja criar uma aplicação embarcada é desejavel que use sempre a conta "SYSDBA" para não esbarrar em problemas de permissões;
  • Na questão de compatibilidade voce poderá programar exatamente como fazia antes, se voce é programador Delphi e usava o IBX para acessar o Firebird, continue usando o IBX, se voce usava o IBO, continue a usar o IBO... nada muda no seu estilo de programação, apenas o tipo de acesso que passará a ser local ao invés de TCP/IP, NetBIOS ou IPX/SPX;
  • Voce pode disparar quantas aplicações "embarcadas" simultaneamente quiser que não haverá nenhum conflito, mesmo que exista outras aplicações usando o Firebird/Interbase em rede, apenas tenha certeza de ter memória o suficiente para rodar todas elas;
  • A arquitetura usada no modelo embarcado é a SuperServer, cada aplicativo "embarcado" abrirá uma nova instancia do SuperServer, com muitos aplicativos "embarcados" rodando simultaneamente poderá haver problemas de lentidão se não houver memória suficiente, sem falar, que dois ou mais aplicativos acessando a mesma base deve-se ter cuidado, pois o Firebird embarcado não foi idealizado para essa situação;

Instalando o Firebird Embarcado

Primeiramente baixe a versão "Embeded" (Embarcado) do Firebird, se for criar aplicativos Linux, terá de puxar o CVS do Firebird e compila-lo com a diretriz "--embeded" e gerar um "shared object" (.so) que deverá ser incorporado à sua aplicação Kylix, C++, Phyton, .... e poderá usa-lo como nas instruções que se seguirão para o Windows. Se voce escreve programas em ambiente Windows, a situação é mais simples, pois já existe a DLL do Firebird Embeded disponivel em : http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download (715KB)

Para instalá-lo faça o seguinte procedimento :

  • Crie uma pasta no drive C:\MY_APP e descompacte-o Firebird Embeded nela (são cerca de 4 arquivos contando o README) ;
  • Crie tambem uma pasta em C:\MY_APP\FB e mova o arquivo firebird.msg para essa pasta ;
  • Copie o seu banco de dados Firebird (.gdb ou outro) para a pasta C:\MY_APP ;
  • A maioria dos componentes de acesso no Delphi/Kylix estão previamente configurados para usar DLL client do Interbase chamada gds32.dll, essa DLL no Firebird Embarcado chama-se fbembed.dll, no entanto, se voce usa Delphi/Kylix é provavel que tais componentes queirão utilizar a gds32.dllentão faça o seguinte : renomeie o arquivo C:\MY_APP\fbembed.dll para C:\MY_APP\gds32.dll ;
  • Edite o arquivo firebird.conf que se encontra em C:\MY_APP e modifique a seguinte linha :
  • RootDirectory = C:\MY_APP\FB
  • Se seu banco de dados utiliza UDF"s, então crie a pasta C:\MY_APP\FB\UDF e copie tais UDF"s (que em geral ficariam em c:\arquivos de programas\firebird\udf)para lá ;
  • Se seu banco de dados utiliza charsets ou collates de terceiros, então crie tambem uma pasta C:\MY_APP\FB\INTL e copie as DLL"s (que em geral ficariam em c:\arquivos de programas\firebird\intl)para lá.

Na realidade a pasta C:\MY_APP\FB será a mesma coisa do que C:\ARQUIVOS DE PROGRAMAS\FIREBIRD com as mesmas estruturas, e que pode ou não necessitar das pastas INTL e UDF. No meu caso que não faço uso de collates de terceiros e nem UDF, fica assim a estrutura :

  • C:\MY_APP\firebird.conf
  • C:\MY_APP\meu_aplicativo.exe
  • C:\MY_APP\meus_dados.gdb
  • C:\MY_APP\gds32.dll
  • C:\MY_APP\FB\firebird.msg
  • C:\MY_APP\FB\UDF\
  • C:\MY_APP\FB\INTL\

Criando uma aplicação para ser embarcada

Uma aplicação para ser "embarcada" precisa ter a seguintes caracteristicas:

  • O path do banco de dados deverá ser identificado no componente de acesso como partindo-se do diretorio onde se encontra seu aplicativo, por exemplo, se seu banco de dados está em "localhost:c:\my_app\meus_dados.gdb" então use o path "meus_dados.gdb", um path de conexao com o banco de dados como "localhost:c:\my_app\dados\meus_dados.gdb" será na realidade como "dados\meus_dados.gdb" ;
  • Use sempre a senha "SYSDBA/masterkey" para não ter problemas com permissões.
  • O protocolo de comunicação deverá ser "local" e nunca remota :

Um exemplo de conexão usando o IBObjects :

with IB_Connection1 do
begin
Username:="SYSDBA";
Password:="masterkey";
Database:="meus_dados.gdb";
Protocol:=cpLocal;
Open;
end;
Um exemplo de conexão usando IBX (Interbase Express) :
with IB_IBDatabase1 do
begin
DatabaseName:="meus_dados.gdb";
Params.Clear
Params.Add("user_name=SYSDBA");
Params.Add("password=masterkey");
Open;
end;

Se voce for esperto vai perceber que se usar arquivos .INI ou entradas no Registry para gravar essas definições, então poderá facilmente sem nenhuma re-compilação do projeto tornar seu aplicativo "embarcado" ou não. Alias, eu acredito que a maioria dos programadores já fazem isso para não ter que engessar seu programa a um local especifico para servir de recipiente de dados.

Considerações finais

Os arquivos embarcados na sua aplicação cabem num simples disquete de 1.44K, uma aplicação embarcada consumirá apenas 1MB de RAM a mais do que uma aplicação no modelo classico. E são apenas 3 arquivos (firebird.conf, fbembeded.dll, firebird.msg) que devem ser instalados juntamente com o seu aplicativo. Isto simplifica bastante distribuição de catalogos eletrônicos, programas com acesso a dados não compartilhado, quiosques, etc... somente não recomendaria que voce deixasse o modelo tradicional para usa-lo como "modismo" pois o modelo tradicional cliente/servidor para tais tarefas ainda é o melhor.

O primeiro exemplo de executar CatalogoEletronico.EXE a partir de um CD-ROM foi apenas uma suposição, a versão embarcada do Firebird possui um problema que ainda não foi resolvido, ao executar qualquer programa com o Firebird embarcado são criados arquivos de lock (.lck) na pasta do servidor, em nosso exemplo posterior seria em C:\MY_APP\FB, mas se fosse num CD-ROM haveria problema, pois tal pasta seria de apenas de somente-leitura. Até a versão final do "Firebird Embeded" surgirá alguma opção dentro do arquivo firebird.conf que possa resolver tal questão.

Arquivos para download :

Para baixar o Firebird Embarcado então cliqueaqui (apenas 715KB).

Este artigo está sob forma de licença GPL (General Public License) e pode ser reproduzido e distribuido livremente em outros tipos de mídia diferentes donde este artigo foi originalmente publicado, no entanto, atente-se para fato de que qualquer produto associado à este artigo também herdará as características GPL e também deverá ser fornecido livremente.

Para maiores esclarecimentos leia sobre a GPL em: http://www.gnu.org/philosophy/philosophy.pt.html

Gladiston Santana

Gladiston Santana - Programador e Especialista em Banco de Dados.