Utilizando DBExpress de uma Maneira Fácil

By admin

Artigo enviado por: Marcio F. Cruz

DBExpress, segundo meus testes, é a melhor tecnologia para comunicação com banco de dados. Mas, infelizmente, exige a configuração de vários parâmetros e manipulação de vários componentes visuais.

Pensando neste problema, resolvi criar um componente que contém um conjunto de classes, para facilitar a vida do programador em trabalhar com esta maravilhosa tecnologia.

Procurei criar as classes da melhor maneira possível, com os nomes dos métodos e propriedades o mais parecido possível com o que conhecemos e utilizamos em BDE, Zeos, ADO e mesmo no DBExpress.
Neste artigo, descreverei como instalar e fazer uma aplicação simples. Espero que seja útil para a comunidade e, talvez, os pacotes e classes de suas regras de negócio a utilizem.

Passo 1

Download http://sourceforge.net/projects/dddbxfacil/
Este pacote comtém o componente dddbxfacil com suas classes, bem como uma aplicação simples para utilizá-la.

Passo 2

Criar arquivo de configuração. Este arquivo, já está contido no pacote de exemplo e, ele contém a estrutura que é usada pelo dbconnections.ini e, serve para indicar os parâmetros para conexão ao banco de dados. Eu não costumo deixar o login e password contido neste arquivo mas, nada impede de se inserir nele.

A configuração que defini, foi para o Oracle mas, pode ser para qualquer banco que o Dbexpress é compatível que, acho que são todos:

[NOMESECAOCONFIGORACLE]
CONNECTIONNAME=OracleConnection
GETDRIVERFUNC=getSQLDriverORACLE
VENDORLIB=oci.dll
LibraryName=dbxora30.dll
DriverName=Oracle
HostName=
Database=
User_Name=
Password=
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
Compressed=False
Encrypted=False

Passo 3

No uses de sua unit, vamos inserir as seguintes units:
DB, DBTables, ddcomumDBX, ddconexaoDBX, ddsqlDBX, ddproviderDBX.

Passo 4

Vamos no private e, colocar as seguintes “variáveis”:

ConexaoDBX: TConexaoDBX;
ProviderDBX: TProviderDBX;
SqlDBX: TsqlDBX;

Passo 5

Este passo é opcional mas, para mostrar melhor o funcionamento da classe, criaremos um método chamado MeuDataChange, novamente apontar ele.

//No private:
procedure MeuDataChange(Sender: TObject; Field: Tfield);

//No implementation
procedure TForm2.MeuDataChange(Sender: TObject; Field: TField);
begin
// Nao é necessário colocar teste para ver se tabela tá aberta, DisableControls, etc…

grbTesteGrid.Caption := ‘Testando o grid. Agora são ‘+
FormatDateTime(‘dd/mm/yyyy hh:nn:ss’, now);
end;

Passo 6

Precisamos instanciar as variáveis que criamos no private. Para isso, criei procedimentos para facilitar isso. No formShow, colocaremos o seguinte código:

ddconexaoDBX.ConexaoDBXInit(ConexaoDBX,  nil,
IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName))+‘configuracao.ini’,
‘NOMESECAOCONFIGORACLE’);

ConexaoDBX.Login := ‘usuario’;
ConexaoDBX.Senha := ’senha’;

ddproviderDBX.ProviderDBXInit(ProviderDBX,
ConexaoDBX,
DBGrid1,
‘ROWID’,
true,
MeuDataChange);

ddsqlDBX.SqlDBXInit(SqlDBX, ConexaoDBX);

Passo 7

Exemplo de código para executar busca no banco de dados:

procedure TForm2.btnProcurarClick(Sender: TObject);
var
Retorno: TProviderRetorno;
begin
ConexaoDBX.ConectarSeDesconectado;

ProviderDBX.ClearAll;
with ProviderDBX, ProviderDBX.LinhaSQL do
begin
Add(‘SELECT * FROM TABELA’);

Retorno := OpenDQL;
end;
end;

Passo 8

Exemplo de evento de inclusão:

procedure TForm2.btnincluirClick(Sender: TObject);
var
iProximoCodigo: integer;
begin
ConexaoDBX.ConectarSeDesconectado;

// Pegar Próximo Codigo
with SQLDBX do
begin
setLinhaSQL(‘SELECT MAX(CODIGO) PROXIMO FROM TABELA’);

OpenDQL;

iProximoCodigo := SQLDQl.FieldByName(‘PROXIMO’).AsInteger+1;
end;

ConexaoDBX.Transacao_Abrir;

try
// Incluir
with SqlDBX do
begin
ClearAll;

with LinhaSQL do
begin
Add(‘INSERT INTO TABELA (CODIGO, DESCRICAO)’);
Add(‘VALUES’);
Add(‘(:P_CODIGO, :P _DESCRICAO)’);
end;

AddParam(ftInteger, ‘P_CODIGO’, iProximoCodigo);
AddParam(ftString, ‘P_DESCRICAO’, ‘nome ‘+IntToStr(iProximoCodigo));

ExecDML;
end;

ConexaoDBX.Transacao_Commit;
except
on E:Exception do
begin
ConexaoDBX.Transacao_RollBack;

ShowMessage(E.Message);
end;
end;
end;

No arquivo que é baixado do sourceforge, este exemplo já está contido.

Qualquer dúvida, podem me escrever para meu e-mail que eu respondo:

programador@marciofcruz.com

categoriaComponentes, DBExpress commento2 Comments datamaio 4th, 2009
Read All