Neste artigo venho comentar sobre a criação de aplicativos usando o RAD Studio 2010 com banco de dados firebird 2.1. Como todos sabem o Delphi 2010 já possui nativo, os drivers de conexão
com o banco de dados firebird. O que foi muito bom, pois até a versão 2009, tínhamos que ficar encontrado drivers que melhor se adequava.
Vamos usar para efetuar a conexão com o banco de dados, os componentes da paleta dbExpress. Sendo assim, vamos primeiramente, verificar se o arquivo de configuração dbxdrivers.ini já está habilitado para conexão com o firebird. Para isso abra o arquivo normalmente localizado na pasta C:\Users\Public\Documents\RAD Studio\dbExpress\7.0. Na sessão [Installed Drivers], verifique se a chave Firebird esta igual a “1”, que indica estar habilitado a configuração, caso contrário, mude a informação da chave para “1” e salve o arquivo.
- Com o delphi devidamente aberto, adicione a um datamodulo o componente SQLConnection.
- Na propriedade ConnectionName, selecione a opção FBConection.
- Agora abra o Editor de valores da propriedade Params, e informe o path do arquivo de banco de dados na chave Database e seqüência clique em ok.
- Na propriedade LoginPrompt, selecione false para evitar que seja solicitado dados da conexão toda vez que a mesma for ativada.
- Altere a propriedade Conected para true, Caso os passos anteriores tenham sidos efetuados corretamente, a conexão estará estabelecida.
Para realizar a distribuição do aplicativo, você deverá enviar junto com o executável, uma cópia da DLL dbxfb.dll e dos arquivos dbxconnections.ini e dbxdrivers.ini, que é onde estará armazenado os dados para conexão, e adicionar os códigos abaixo no evento OnCreate do datamodulo.
try
ConexaoDBX.Connected := false;
ConexaoDBX.Params.Clear;
ConexaoDBX.LoadParamsFromIniFile(ExtractFilePath(Application.ExeName)+'dbxconnections.ini');
ConexaoDBX.Connected := true;
//
ConexaoDados := ConexaoDBX;
except
MessageDlg('Erro ao conectar banco de dados. Verifique!!!', mtWarning, [mbOK], 0);
Application.CreateForm(TFrmConfigConexao,FrmConfigConexao);
try
FrmConfigConexao.showmodal;
finally
FrmConfigConexao.Destroy;
MessageDlg('O aplicativo será encerrado. Execute-o novamente!!!', mtWarning, [mbOK], 0);
Application.Terminate;
end;
end;
Observe ainda, que no código acima efetuo a chamada de outro formulário, FrmConfigConexao, que é onde eu crio estes arquivos em tempo de execução em caso de erro na conexão. Veja figura abaixo:
function TFrmConfigConexao.GravaDbxConectionsINI: Boolean;
var sNomeArq1, sNomeArq2 : string;
sConfig1,sConfig2 : TIniFile;
begin
sNomeArq1 := ExtractFilePath(Application.ExeName)+'dbxconnections.ini';
sNomeArq2 := ExtractFilePath(Application.ExeName)+'dbxdrivers.ini';
// dbxconection.ini
sConfig1 := TIniFile.Create(sNomeArq1);
sConfig1.WriteString('FBConnection',';DelegateConnection','DBXTraceConnection');
sConfig1.WriteString('FBConnection','DriverName',CdsConfigDRIVER.AsString);
sConfig1.WriteInteger('FBConnection','BlobSize',1);
sConfig1.WriteString('FBConnection','CommitRetain','False');
sConfig1.WriteString('FBConnection','Database',CdsConfigPATHBANCO.AsString);
sConfig1.WriteString('FBConnection','ErrorResourceFile','');
sConfig1.WriteInteger('FBConnection','LocaleCode',0000);
sConfig1.WriteString('FBConnection','Password',CdsConfigSENHAUSU.AsString);
sConfig1.WriteString('FBConnection','RoleName','RoleName');
sConfig1.WriteString('FBConnection','ServerCharSet','');
sConfig1.WriteInteger('FBConnection','SQLDialect',3);
sConfig1.WriteString('FBConnection','Interbase TransIsolation','ReadCommited');
sConfig1.WriteString('FBConnection','User_Name',CdsConfigNOMEUSU.AsString);
sConfig1.WriteString('FBConnection','WaitOnLocks','True');
sConfig1.WriteString('FBConnection','IsolationLevel','ReadCommitted');
sConfig1.WriteString('FBConnection','Trim Char','False');
sConfig1.Free;
// drivers.ini
sConfig2 := TIniFile.Create(sNomeArq2);
sConfig2.WriteString('Firebird','DriverUnit','DBXFirebird');
sConfig2.WriteString('Firebird','DriverPackageLoader',
'TDBXDynalinkDriverLoader,DbxCommonDriver140.bpl');
sConfig2.WriteString('Firebird','DriverAssemblyLoader',
'Borland.Data.TDBXDynalinkDriverLoader,
Borland.Data.DbxCommonDriver,
Version=14.0.0.0,
Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b');
sConfig2.WriteString('Firebird','MetaDataPackageLoader',
'TDBXFirebirdMetaDataCommandFactory,DbxFirebirdDriver140.bpl');
sConfig2.WriteString('Firebird','MetaDataAssemblyLoader',
'Borland.Data.TDBXFirebirdMetaDataCommandFactory,
Borland.Data.DbxFirebirdDriver,
Version=14.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b');
sConfig2.WriteString('Firebird','GetDriverFunc','getSQLDriverINTERBASE');
sConfig2.WriteString('Firebird','LibraryName','dbxfb.dll');
sConfig2.WriteString('Firebird','VendorLib','fbclient.DLL');
sConfig2.WriteInteger('Firebird','BlobSize',-1);
sConfig2.WriteString('Firebird','CommitRetain','False');
sConfig2.WriteString('Firebird','Database',CdsConfigPATHBANCO.AsString);
sConfig2.WriteString('Firebird','ErrorResourceFile','');
sConfig2.WriteString('Firebird','LocaleCode','0000');
sConfig2.WriteString('Firebird','Password',CdsConfigSENHAUSU.AsString);
sConfig2.WriteString('Firebird','RoleName','RoleName');
sConfig2.WriteString('Firebird','ServerCharSet','');
sConfig2.WriteInteger('Firebird','SQLDialect',3);
sConfig2.WriteString('Firebird','IsolationLevel','ReadCommitted');
sConfig2.WriteString('Firebird','User_Name',CdsConfigNOMEUSU.AsString);
sConfig2.WriteString('Firebird','WaitOnLocks','True');
sConfig2.WriteString('Firebird','Trim Char','False');
sConfig2.Free;
end;
Há programadores que preferem apenas armazenar o path do arquivo em arquivo de configuração e em tempo de execução passar os parâmetros, mas acredito que desta forma facilita a manutenção de acesso a base de dados.
Espero que tenham gostado!