[firebase-br] Rodar Firebird num CD

Michel Sugimoto michelsugimoto em yahoo.com.br
Seg Dez 5 15:53:01 -03 2005


Vc precisa fazer uma aplicacao embarcada.

Artigo retirado de: 
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=217



Aprenda a instalar o Firebird sem precisar instalar o Firebird Server.
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 
distribuí-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 
utilizá-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;

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) ;

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\
C:\MY_APP\FB\INTL\
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" ;
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. 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 catálogos 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 :

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. Se reproduzir este artigo em outro local, como cortesia 
avise o autor.

Autor : Gladiston Santana
Home Page : www.gladisto.hpg.com.br
Enviado por: Wesley Bento Moreira

Marcos D. Almeida - Widitec wrote:
> Pessoal , estou precisando criar um Demo de um sistema nosso para demonstrar aos nossos clientes, mas preciso q o firebird server rode direto do CD, sem que seja necessario a instação do mesmo nos PCs dos nossos clientes...
> o sistema é para Windows 98 e XP.
> 
> atte 
> ==========================
> Marcos Darui Almeida
> 
> Depto de Informática
> Eletro Widitec Ltda 
> Fone/Fax: (55) 3375-4499
> Panambi - RS - Brasil
> www.widitec.com.br 
> www.widitec.com
> ==========================
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista