Firebird Embeded Windows

5
Criando uma aplicação "embarcada" com o Firebird por Gladiston Santana O Firebird é um banco de dados leve, rápido e bastante flexível, uma dessas flexibilidades é a capacidade de "embarcar" aplicações com ele. Como assim "embarcar" ? - Talvez você pergunte. "Embarcar" significa que você pode criar um aplicativo e embutir (ou embarcar) o Firebird dentro de seu aplicativo 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 sendo executado naquele instante. Vamos à um exemplo para ficar mais fácil entender, digamos que precise distribuir um CDROM com um catalogo de preços, neste CDROM você vai querer gravar seu aplicativo e acessará os dados que estão gravados localmente no CDROM. você não quer utilizar um banco de dados flat-table como Paradox, Access ou DBF porque você já possui o aplicativo criado para acessar os dados em Firebird/Interbase. A dificuldade estaria na distribuição de tal aplicativo, pois forçar os usuários a instalar o Firebird/Interbase apenas para ver o conteúdo de 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 difícil fazer isso à primeira vista, mas você perceberá neste artigo, o quão simples é, é tão simples que talvez você deseje utiliza-los em todos os aplicativos que você crie, porém de antemão devo lhe avisar que a versão embarcada do Firebird possui as seguintes características ou até mesmo limitações : ! 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 de tal aplicativo será rápida e o consumo de memória bastante eficiente ; ! Qualquer configuração do Firebird ou Interbase (independentemente de versão) 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 acostumado a ter problemas quando tinha de distribuir o arcaico BDE. Para se ter uma idéia, o Firebird embarcado sequer faz uso de registry;

Transcript of Firebird Embeded Windows

Page 1: Firebird Embeded Windows

Criando uma aplicação "embarcada" com o Firebird por Gladiston Santana

O Firebird é um banco de dados leve, rápido e bastante flexível, uma dessas flexibilidades é a capacidade de "embarcar" aplicações com ele. Como assim "embarcar" ? - Talvez você pergunte. "Embarcar" significa que você pode criar um aplicativo e embutir (ou embarcar) o Firebird dentro de seu aplicativo 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 sendo executado naquele instante. Vamos à um exemplo para ficar mais fácil entender, digamos que precise distribuir um CDROM com um catalogo de preços, neste CDROM você vai querer gravar seu aplicativo e acessará os dados que estão gravados localmente no CDROM. você não quer utilizar um banco de dados flat-table como Paradox, Access ou DBF porque você já possui o aplicativo criado para acessar os dados em Firebird/Interbase. A dificuldade estaria na distribuição de tal aplicativo, pois forçar os usuários a instalar o Firebird/Interbase apenas para ver o conteúdo de 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 difícil fazer isso à primeira vista, mas você perceberá neste artigo, o quão simples é, é tão simples que talvez você deseje utiliza-los em todos os aplicativos que você crie, porém de antemão devo lhe avisar que a versão embarcada do Firebird possui as seguintes características ou até mesmo limitações : ! 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 de tal aplicativo será rápida e o consumo de memória bastante eficiente ; ! Qualquer configuração do Firebird ou Interbase (independentemente de versão) 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 acostumado a ter problemas quando tinha de distribuir o arcaico BDE. Para se ter uma idéia, o Firebird embarcado sequer faz uso de registry;

Page 2: Firebird Embeded Windows

! Na questão de segurança, a versão "embarcada" não implementa nenhum mecanismo de autenticação, a senha é ignorada, apesar disso se você 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 é desejável que use sempre a conta "SYSDBA" para não esbarrar em problemas de permissões; ! Na questão de compatibilidade você poderá programar exatamente como fazia antes, se você é programador Delphi e usava o IBX para acessar o Firebird, continue usando o IBX, se você 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; ! Você 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. Note porém, que não deverá existir várias aplicações acessando a mesma base de dados, pois o Firebird embarcado não foi idealizado para este tipo de operação; ! Banco de dados com acesso do tipo "somente leitura" (read-only), ou cujas mídias só permitam esse tipo de acesso como por exemplo CDROM necessita que o(s) arquivo(s) de base de dados estejam marcados "read-only" e isto só pode ser feito com o uso do gfix para uma base de dados já existente. A sintaxe do gfix para este caso é a seguinte :

gfix -mode read_only C:\MY_APP\meus_dados.gdb. Se você não fizer isso, o Firebird tentará criar arquivos de travamento (arquivos .lck) na mesma pasta da base de dados para seu uso interno e poderá provocar erros no caso mídias ou locais cujo acesso é de "somente leitura" ; 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 você escreve programas em ambiente Windows, a situação é mais simples, pois já existe a DLL do Firebird Embeded disponível em : http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download#150 Para instala-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) ;

Page 3: Firebird Embeded Windows

Crie também 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 você usa Delphi/Kylix é provável que tais componentes queiram utilizar a gds32.dll, entã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 também 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\<VAZIO> C:\MY_APP\FB\INTL\<VAZIO> Criando uma aplicação para ser embarcada Uma aplicação para ser "embarcada" precisa ter a seguintes características : O path do banco de dados deverá ser identificado no componente de acesso como partindo-se do diretório 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 conexão com o banco de dados como "localhost:c:\my_app\dados\meus_dados.gdb" será na realidade como "dados\meus_dados.gdb" ;

Page 4: Firebird Embeded Windows

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 você for esperto vai perceber que os procedimentos para acesso embebed é apenas setar os componentes de acesso para usar a conexão local. Isto significa em outras palavras de que se você for um bom programador, poderá criar um mesmo programa que permita acesso local ou remoto. E se o acesso for local, então usar-se a DLL da versão "Embeded" do Firebird. Para se fazer poderá usar métodos simples como guardar a configuração do seu aplicativo em arquivos no formato INI e lê-los no momento de partida (inicialização) de seu programa. Esse é um jeito esperto de ter um mesmo aplicativo que poderá rodar tanto como "Embeded" como com protocolo remoto se for o caso. 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 clássico cliente/servidor com protocolo de acesso remoto.

Page 5: Firebird Embeded Windows

Basta apenas 3 arquivos (firebird.conf, fbembeded.dll, firebird.msg) que devem ser instalados juntamente com o seu aplicativo. Isto simplifica bastante distribuição de cátalogos eletrônicos, programas com acesso a dados não compartilhado, quiosques, versões de demonstração, etc... somente não recomendaria que você deixasse o modelo tradicional de acesso remoto para usar o "embarcado" (acesso local) como "modismo" pois o modelo tradicional cliente/servidor com acesso remoto/local para tais tarefas ainda é o melhor. -------------------------------------------------------------------------------- Arquivos para download : Para baixar o Firebird Embarcado então clique aqui (apenas 715KB):

http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download#150

Este artigo está sob forma de licença GPL (General Public License) e pode ser reproduzido e distribuído 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 Autor : Gladiston Santana Data : 20-Maio-2003 e atualizado em 18-Julho-2003 Home Page : http://www.gladisto.hpg.com.br

Artigo Original

Gladiston Santana

Comunidade Firebird de Língua Portuguesa

Visite a Comunidade em:

http://www.comunidade-firebird.org

A Comunidade Firebird de Língua Portuguesa foi autorizada pelo Autor do Original para divulgar este trabalho

http://www.gladisto.hpg.com.br