Neste artigo mostrarei uma variação de como configurar o acesso ao banco de dados Firebird, usando aliases no lado do servidor e arquivos INI no lado do cliente. Para facilitar o desenrolar deste, tomarei como base o artigo...
publicado por diogoIPA em maio/2005, titulado "Criar
arquivo de configuração para Banco de dados IB/FB".
Como funciona o FB em relação aos banco de dados e sua localização?
O Firebird é um banco open-source derivado do fork do código
do Interbase 6.0 em 2000. E como tal, mantém muitos comportamentos.
Entre eles, permitir que o banco seja identificado por seu caminho
na máquina servidora.
Devido a esta característica, algumas pessoas imaginam (infelizmente) que os arquivos do banco de dados precisam
ser compartilhados, e desandam a colocar os mesmo em pastas ou drives mapeados
de rede.
Esse procedimento, além de desnecessário e de comprometer a
segurança do servidor, expõe o arquivo do banco de dados a um
risco de corrupção praticamente irrecuperável, mesmo usando
o utilitário
GFIX. Resumindo:
Não coloque o banco de dados em um drive de rede mapeado ou
diretório
compartilhado! Ele deve estar sem acesso direto pelas outras máquinas
da rede!!!
Aliases do lado do servidor
Na versão 1.5 foi implementado um mecanismo de aliasing no lado do
servidor, pedido feito há muito tempo pela comunidade.
Fazer um alias no servidor é algo bastante simples, aliás,
necessita-se do pesadíssimo editor de texto chamado Bloco de notas para
abrir
com o arquivo aliases.conf, que se encontra no diretório de instalação do
FB, e acrescentar uma linha do tipo:
banco=C:\dados\banco.fdb
Para usar o alias, ao especificar a string de conexão do banco, deve-se
seguir a seguinte sintaxe:
nome_do_servidor:banco
Usando arquivos INI para os parâmetros da conexão
Como dito anteriormente, este código foi publicado por DiogoIPA, em
maio/2005, e modificado/corrigido por mim. Utilizarei os comentários
no formato (*..*).
Primeiro passo, criar uma procedure para Gravar as configurações no ini:
//Url: caminho do banco
//Usr: nome de usuário
//Pws: senha
procedure Gravar_Configuracao(Url , Usr, pws : String);
var Banco : TIniFile;
Begin
Try
SetCurrentDir(ExtractFilePath(Application.ExeName));
Banco := TIniFile.create(GetCurrentDir + '\database.ini');
(* onde "c:\database.ini" e o caminho eu por padrão deixo somente
database.ini sem o "c:\" assim será salvo em c:\windows\
Eu alterei o exemplo para que o INI seja sempre gravado no
diretório onde se encontra o executável do programa *)
Banco.WriteString('DATABASE','CAMINHO',URL);
Banco.WriteString('DATABASE','USUARIO',USR);
Banco.WriteString('DATABASE','USUARIO',PWS);
Finnaly
Banco.Free;
End;
End;
Segundo passo, criar um procedimento para Ler do ini as configurações gravadas:
//url : caminho do banco / USR : nome de usuário / PWS : senha
(*
O código original não poderia funcionar pois é necessário
que esses parâmetros sejam passados por referência em vez
de por valor como no código original
*)
procedure Ler_Configuracao(var Url: String;
var Usr: String;
var pws: String);
Begin
Try
Banco := TIniFile.create(GetCurrentDir+'\database.ini');
URL := Banco.WriteString('DATABASE','CAMINHO',URL);
USR := Banco.WriteString('DATABASE','USUARIO',USR);
PWS := Banco.WriteString('DATABASE','USUARIO',PWS);
Finnaly
Banco.Free;
End;
End;
Terceiro passo, carregar as informações do ini para o componente de conexão.
Neste exemplo, faço essa operação no evento onCreate do form:
procedure form1.create(Sender : TObject);
Var url,usr,pwd : String
Begin
SetCurrentDir(ExtractFilePath(Application.ExeName));
IbDatabase.Close;
Ler_configuracao(Url,Usr,Pwd);
IbdataBase.params.add('user_name='+USR);
Ibdatabase.params.add('password ='+PWD);
ibdatabase.DatabaseName := Url;
IbDatabase.Open;
End;
Espero ter ajudado.
|