segunda-feira, 28 de dezembro de 2009

Conexão com SGDBS Utilizando DBExpress – Parte 2

Nesse Artigo veremos como passar os Parametros para que a conexão com o banco seja carregada dinamicamente e veremos como é simples conectar ao banco Oracle 10G Express.

Para visualizar o Artigo Anterior acesse:


A versão do Oracle Express que iremos utilizar tem algumas restrições sendo as principais expaço de armazenamento permitindo apenas 5 GB de banco sendo que cerca de 20% é ocupada pelas tabelas de sistema e cache e aceita apenas 1GB de Memoria já as demais versões são mais flexiveis contudo tem um custo elevado. Para realizar o download acesse: http://www.oracle.com/technology/software/products/database/xe/index.html a versão Express possui uma home onde se pode controlar totalmente as informações constantes no banco de dados contudo para facilitar podemos usar a ferramenta Oracle SQL Developer disponivel no site http://www.oracle.com/technology/software/products/sql/index.html.
Apos a Instalação do Oracle Crie um novo usuario e execute o script para criar a tabela e a chave Primaria, adicione uma nova aba dois button(Abir Conexão e Aplicar Alterações) e os componentes para podermos acessar o banco de dados.
Crie uma nova conexão no DataExplorer utilizando o Driver Oracle (Nativo do Delphi) no campo DataBaseName coloque o Nome da Instancia do Oracle a qual quer se conectar usuario e senha conforma imagem 1.

Imagem 1 – Parametros Oracle


Altere no SQLConnection do Oracle em Driver a propriedade “DecimalSeparetor” para o valor ',' ou invés de '. ' para evitar erro com campos numericos.
Adicione a Sql e os Fields no SQLDSOracle e no CDSOracle configure o Provader Flag dos Campos, adicione um TDBNavigator e DBGrid e os configure.
Adicione a pasta do Projeto as seguintes DLL (dbexpint.dll, dbxint.dll, dbxmss30.dll, dbxora.dll, fbclient.dll, midas.dll, msvcr71.dll, oci.dll, tbodbxfb.dll) e os INI (dbxconnections.ini, dbxdrivers.ini), o arquivo dbxconnections.ini pode estar sem conteudo porem o Framework verifica a sua existencia no execução.


Crie um arquivo com o nome de CONFIG.INI e adicione o conteudo abaixo:
[FIREBIRD]
ConnectionName=DemoDBExpressFB
drivername=TBODBXFB
hostname=localhost
user_name=SYSDBA
password=masterkey
port=3050
Database=D:\Projetos\ArtigoActiveDelphi\BDACTIVE.FDB


[ORACLE]
ConnectionName=DemoDBExpressOracle
drivername=ORACLE
hostname=localhost
user_name=Pedro
password=12345678
port=1521
Database=XE


Agora vamos ao projeto para carregar as informações acima como parametro na conexão com o banco declare no Uses o unit IniFiles e crir a função abaixo:


function TFRMDemoDBExpress.LerIni(Arquivo, Alias, Chave, Default: String): String;
var config: TIniFile;
begin
config := TIniFile.Create(ExtractFilePath(Application.ExeName)+Arquivo);
Result := config.ReadString(Alias,Chave,Default);
end;

No OnClick do botão Abrir Conexão do Firebird altere o codigo conforme abaixo:
procedure TFRMDemoDBExpress.bitConectarFireBirdClick(Sender: TObject);
begin
SQLCFirebird.Close;
try
SQLCFirebird.ConnectionName := LerIni('CONFIG.INI','FIREBIRD','ConnectionName','DEMODBEXPRESSFB');//Carregar o Nome da Conexão com o Banco
SQLCFirebird.ParamsLoaded := True;
SQLCFirebird.DriverName := LerIni('CONFIG.INI','FIREBIRD','drivername','TBODBXFB');//Carregar o Driver a Ser utilizado
SQLCFirebird.GetDriverFunc := 'getSQLDriver';//Função do Driver
SQLCFirebird.LibraryName := 'tbodbxfb.dll';//Dll do Driver
SQLCFirebird.VendorLib := 'fbclient.dll';//Dll do Client SGDB
SQLCFirebird.Params.Clear;
SQLCFirebird.Params.Add('drivername='+LerIni('CONFIG.INI','FIREBIRD','drivername','TBODBXFB'));//Carregar o Driver a Ser utilizado
SQLCFirebird.Params.Add('hostname='+LerIni('CONFIG.INI','FIREBIRD','hostname','localhost'));//Nome do HOST "Servidor"
SQLCFirebird.Params.Add('user_name='+LerIni('CONFIG.INI','FIREBIRD','user_name','SYSDBA'));
SQLCFirebird.Params.Add('password='+LerIni('CONFIG.INI','FIREBIRD','password','masterkey'));
SQLCFirebird.Params.Add('port='+LerIni('CONFIG.INI','FIREBIRD','port','3050'));//Porta de Configuração do SGDB
SQLCFirebird.Params.Add('Database='+LerIni('CONFIG.INI','FIREBIRD','Database','C:\DBExpress\BDACTIVE.FDB'));//Caminho do Banco de dados
SQLCFirebird.Params.Add('blobsize=-1');
SQLCFirebird.Open;
except
MessageDlg('Não foi possivel Conectar ao Banco de Dados!',mtError,[mbOK],0);
exit;
end;
if bitConectarFireBird.Caption = 'Abrir Conexão' then
begin
SQLCFirebird.Open;
CDSFirebird.Open;
bitConectarFireBird.Caption := 'Fechar Conexão';
end
else
begin
CDSFirebird.Close;
SQLCFirebird.Close;
bitConectarFireBird.Caption := 'Abrir Conexão';
end;
end;


No OnClick do botão Abrir Conexão do Oracle coloque o código abaixo:
procedure TFRMDemoDBExpress.bitConectarOracleClick(Sender: TObject);
begin
SQLCOracle.Close;
try
SQLCOracle.ConnectionName := LerIni('CONFIG.INI','ORACLE','ConnectionName','DemoDBExpressOracle');//Carregar o Nome da Conexão com o Banco
SQLCOracle.ParamsLoaded := True;
SQLCOracle.DriverName := LerIni('CONFIG.INI','ORACLE','drivername','ORACLE');//Carregar o Driver a Ser utilizado
SQLCOracle.GetDriverFunc := 'getSQLDriverORACLE';//Função do Driver
SQLCOracle.LibraryName := 'dbxora.dll';//Dll do Driver
SQLCOracle.VendorLib := 'oci.dll';//Dll do Client SGDB
SQLCOracle.Params.Clear;
SQLCOracle.Params.Add('drivername='+LerIni('CONFIG.INI','ORACLE','drivername','ORACLE'));//Carregar o Driver a Ser utilizado
SQLCOracle.Params.Add('hostname='+LerIni('CONFIG.INI','ORACLE','hostname','localhost'));//Nome do HOST "Servidor"
SQLCOracle.Params.Add('user_name='+LerIni('CONFIG.INI','ORACLE','user_name','Pedro'));
SQLCOracle.Params.Add('password='+LerIni('CONFIG.INI','ORACLE','password','12345678'));
SQLCOracle.Params.Add('port='+LerIni('CONFIG.INI','ORACLE','port','1521'));//Porta de Configuração do SGDB
SQLCOracle.Params.Add('Database='+LerIni('CONFIG.INI','ORACLE','Database','XE'));//Nome da Instancia do Banco de Dados
SQLCOracle.Params.Add('blobsize=-1');
SQLCOracle.Open;
except
MessageDlg('Não foi possivel Conectar ao Banco de Dados!',mtError,[mbOK],0);
exit;
end;
if bitConectarOracle.Caption = 'Abrir Conexão' then
begin
SQLCOracle.Open;
CDSOracle.Open;
bitConectarOracle.Caption := 'Fechar Conexão';
end
else
begin
CDSOracle.Close;
SQLCOracle.Close;
bitConectarOracle.Caption := 'Abrir Conexão';
end;
end;


No OnClick do botão Aplicar Alterações Coloque o código:
CDSOracle.ApplyUpdates(0);


Conclusão:
Nessa nossa segunda parte vimos como carregar os parametros para o DBExpress em tempo de Execução, conexão utilizando o Oracle 10G XE. Futuramente veremos funcionalidade oferecidas pelo DBExpress e o CDS como por exemplo a exportação de dados para Arquivos Binarios e XML.
Espero que todos aproveitem o conteudo divulgado e em caso de duvidas estou a disposição para ajudar pelo e-mail bragaped@gmail.com.