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.

quinta-feira, 5 de novembro de 2009

Conexão com SGDBS Utilizando DBExpress – Parte 1

Olá delphianos, nesse artigo irei apresentar de como Conectar os Principais SGDBS do Mercado através do Delphi 2009 e DBExpress 5.
Neste artigo Utilizaremos as Ferramentas Delphi 2009 com DBExpress 5 os drivers TBODBXFB 0.9 para Firebird e os drivers Nativos do Delphi para os demais SGDBS.
Nas edições 53 e 60 da revista Active Delphi foram apresentados alguns artigos de conexão utilizando o driver TBODBXFB e como realizar a sua Instalação. Para Baixar o Instalador do Driver TBODBXFB no mesmo pode-se encontrar manuais de como realizar a Instalação e os possíveis erros e suas soluções.
Nessa Primeira Parte do Artigo iremos iniciar com o Firebird 2.1, se você ainda não tem instalado baixe-o em www.firebirdsql.org. Para gerenciar o banco de dados, utilizaremos o IBExpert, que é uma das melhores front-end para administração de banco de dados Interbase e Firebird.
Considerando que seu Firebird e IBExpert estejam devidamente Instalados, vamos agora para a criação do banco de dados do exemplo, com a execução do seguinte script;
SET SQL DIALECT 3;
SET NAMES WIN1252;
CREATE DATABASE 'localhost:C:\DBExpress\BDACTIVE.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1252;
/**** Tables ****/
CREATE TABLE BANCOS (
CHAVE INTEGER NOT NULL,
BANCO INTEGER NOT NULL,
DESCRICAO VARCHAR(25) NOT NULL,
AGENCIA INTEGER,
CONTA INTEGER,
DVCONTA INTEGER
);
/**** Primary Keys ****/
ALTER TABLE BANCOS ADD CONSTRAINT PK_BANCO PRIMARY KEY (CHAVE);
Após a Criação do Banco de Dados abra o Delphi e vá em “File – New - VCL Forms Application – Delphi” conforme imagem 1 para iniciar a criação da Aplicação.

Imagem 1 – Criação do Projeto
Altere a Propriedade Name para “FRMDemoDBExpress”, Caption para “Demo Conexão DBExpress” e Position para “poDesktopCenter” após realizar a alteração clique em “File – Save All” salve a unit como “uDemoDBExpress.pas” o Projects como “DemoDBExpress.dproj”.
Adicione ao Projeto o componente TpageControl renomeie para “pcPrincipal”, altere a propriedade Align para alClient, clique com o botão direito no “PageControl” e selecione a opção “New Page” conforme Imagem 2 e renomei para “tsFirebird”

Imagem 2 – Adicionando Page

Adicione ao Projeto os Componentes TSQLConnection, TSQLDataSet, TDataSetProvider, TClientDataSet e TDataSource. Renomeie para SQLCFireBird, SQLDSFirebrid, DSPFirebird, CDSFirebird e DSFirebird para que fique de de forma clara cada SGDBS.
O Assistente de Criação de Conexão do DBExpress foi reformulado fazendo com que apenas se utilize o Data Explorer o que não havia necessidade no Delphi 7 para acessar vá em View – Data Explorer será aberto no lado Direito da Tela conforme Imagem 3.

Imagem 3 – Data Explorer
Selecione o Driver TBODBXFB clique com o Botão Direito do Mouse e vá na opção Add New Connection abrir uma tela com as opções Provider Name que vira com o Driver já previamente selecionado coloque o Nome da Conexão como “DemoDBExpress” após a criação da conexão necessitamos selecionar a suas opções para isso clique com o Botão Direito na Conexão e vá em Modify Connection ira abir uma janela onde definiremos os parâmetros Server Name, Database Name, User Name e Password. No “Server Name” é o parâmetro onde definiremos o IP ou Nome do Servidor do Banco de Dados, “Database Name” será definido o caminho local da Base de Dados no Servidor, “User Name e Password” é o Usuário e Senha que iremos utilizar para realizarmos a Conexão, no nosso caso como estamos trabalhando localmente os parâmetros ficaram como da Imagem 4.
O Test Connection não Funcionara devido a erro do driver que está sendo corrigido pelo desenvolvedor, caso haja necessidade de alterar a porta do Serviço do Firebird clique na opção Advanced que o mesmo tem a opção “Port” que pode se alterada.

Imagem 4 – Parâmetros Conexão Firebird

Após realizarmos a configuração da Conexão temos que seleciona la para isso Abra o Object Inspector do SQLCFirebird na opção ConnectionName selecione a Conexão que criamos DemoDBExpress altere a propriedade LoginPrompt para False, finalizamos a criação da nossa Conexão agora utilizaremos em nossa aplicação.
No SQLDSFirebird na propriedade SQLConnection selecione o SQLCFirebird e vá no CommandText e adicione a SQL “select CHAVE, BANCO, DESCRICAO, AGENCIA, CONTA, DVCONTA from BANCOS” após a inserção da SQL de um duplo clique no componente será aberto o Fields Editor clique com o Botão Direito e vá em Add all Fields, após adicionarmos os Fiels temos que configurar as Provider Flags de cada Campo o que implica diretamente na velocidade de nossa aplicação, as opções são:
pfInKey = Se marcado como true, o DSP entenderá que o campo é uma/faz parte da chave primária da tabela.
pfInUpdate = Se marcado como true, o DSP entenderá que o campo será atualizável.
pfInWhere = Se marcado como true, indicará que este campo poderá fazer parte do where nos sql's de alteração (Updates e Deletes).
pfHidden = Se marcado como false, o DSP ignora o campo.
 Na nossa aplicação Ficara da seguinte forma: 
Opções
CHAVE
BANCO
DESCRICAO
AGENCIA
CONTA
DVCONTA
pfInUpdate
True
True
True
True
True
True
pfInWhere
True
False
False
False
False
False
pfInKey
True
False
False
False
False
False
pfHidden
False
False
False
False
False
False
 
 Após configuramos as opções vamos Configurar o DataSetProvider, ClientDataSet e o DataSource, que terá as seguinte opções:
 DataSetProvider: Dataset “SQLDSFirebird”, UpdateMode “upWhereKeyOnly” e a Options “[poAutoRefresh,poPropogateChanges,poUseQuoteChar]”.
 ClientDataSet: ProviderName “DSPFirebird”  após a seleção do Provider de um duplo clique no componente será aberto o Fields Editor clique com o Botão Direito e vá em Add all Fields e Configure o  Provider Flags de cada Campo.
DataSource: DataSet “CDSFirebird”.


Adicione os Fields do ClientDataSet ao Form, TDBNavigator renomeio para dbnFireBird, DBGrid renomeio para dbgFirebird e altere os DataSource para “DSFirebird”, TBitBtn renomeio para bitFirebird no OnClick do Botão adicione o comando “CDSFirebird.ApplyUpdates(0);” e TBitBtn renomeio para bitConectar no OnClick do Botão adicione o comando abaixo:





Conclusão:
Nessa nossa primeira parte vimos como criar uma conexão pelo DBExpress em tempo de Projeto futuramente veremos como passar os parâmetros em tempo de execução e conexão utilizando outros SGDBs como o Oracle 10G XE, dentre outras funcionalidade oferecidas pelo DBExpress e o CDS. Obrigado e até a próxima.