DBExpress Tutorial

Veja nesta Quick um pouco sobre a nova infra estrutura do DBExpress

Olá galera, nesta Quick Tips, irei falar um pouco sobre a nova infra estrutura do DBExpress. A principal Unit que temos no DBExpress é a DBXCommon, vamos criar uma classe para ficar mais prático e organizado, criemos então uma Unit e vamos salvar como uDBExpressTeste.pas

Inicialmente precisamos dar uses em DBXCommon. Vou utilizar o banco de dados Firebird, então automaticamente precisamos dar uses também em DbxFirebird, se formos utilizar o MySQL, daremos uses em DbxMySQL, para o Oracle DbxOracle, SQL Server usamos DbxMSSQL, estes são os principais SGBD`s que temos.

Nota: As units abaixo:

  • DBXFirebird - Versão do Delphi 2010
  • DBXCommon - Versão do Delphi 2007 em diante

Agora vamos adicionar uma classe e algumas propriedades.

unit uDBExpressTest; interface uses DBXCommon, DBXFirebird, Dialogs, SysUtils; Type TDBExpressTest = Class private public property DBXConn : TDBXConnection; property Cmnd : TDBXCommand; property Reader : TDBXReader; property ConnectionName: String; property UserName: String; property Password: String; procedure ExecuteComand; End; Implementation end.
Listagem 1
Nota: Implemente com CTRL + SHIFT + C;

Descrição das propriedades:

DBXConn Conexão do DBExpress
Cmnd Comando a ser executado do DBExpress
Reader Resulta em uma coleção de dados unidirecional
ConnectionName Informar a conexão do criada no DataExplorer
UserName Informar o usuário do Banco de Dados
Password Informar a senha do Banco de Dados

Vamos implementar a procedure para executar um script simples

procedure TDBExpressTest.ExecuteComand; Var S : String; begin //Instanciando a conexão FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection( FConnectionName,FUserName, FPassword); if FDBXConn <> nil then begin //Criando o comando para ser executado FCmnd := FDBXConn.CreateCommand; //Definindo o comando a ser executado FCmnd.Text := 'SELECT * FROM CLIENTE'; //Preparamos o comando para ser executado FCmnd.Prepare; //Executamos o script anterior FReader := FCmnd.ExecuteQuery; //Fazemos um Loop para poder pegar os dados resultantes while FReader.Next do begin //Concatenamos os valores da coluna Descricão apenas uma //forma de mostrar como pegar o conteúdo armazenado S := S +(FReader.Value['DESCRICAO'].GetAnsiString) +#13; end; //Exibimos os dados resultantes S := S + '============================'; //Retorna a Versão do Servidor de Banco de Dados S := S + FDBXConn.ProductVersion; //Exibimos os dados resultantes ShowMessage(S); end; end;
Listagem 2

Veja a função GetAnsiString, temos diversas outras função para diferentes tipos de dados.

Utilizando o exemplo:

procedure TForm1.BitBtn2Click(Sender: TObject); Var DBExpressTest : TDBExpressTest; begin DBExpressTest := TDBExpressTest.Create; with DBExpressTest do begin ConnectionName := 'BDTDS'; UserName := 'sysdba'; Password := 'masterkey'; ExecuteComand; end; end;
Listagem 3

Quando executamos a procedure ExecteComand, veremos que irá aparecer um ShowMessage com todos os dados do Field Descricao.

Olá galera, nesta Quick Tips, irei continuar falando sobre o novo DBExpress que temos no Delphi.

Veremos como criar comandos de Inclusão, Deleção e Alteração. Utilizando aquela mesma classe, desenvolvida na parte anterior

unit uDBExpressTest; interface uses DBXCommon, DBXFirebird, Dialogs, SysUtils; Type TDBExpressTest = Class private public property DBXConn : TDBXConnection; property Cmnd : TDBXCommand; property Reader : TDBXReader; property ConnectionName: String; property UserName: String; property Password: String; procedure ExecuteComand; {Novos comandos} procedure InsertComand; procedure UpdateComand; procedure DeleteComand; End; Implementation end.
Listagem 4

Vamos agora as implementações de cada Procedure.

InsertComand procedure TDBExpressTest.InsertComand; begin FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection( FConnectionName,FUserName, FPassword); if FDBXConn <> nil then begin FCmnd := FDBXConn.CreateCommand; FCmnd.Text := 'INSERT INTO CLIENTE (IDCLIENTE, DESCRICAO, SEXO)' + 'VALUES (11, ' + QuotedStr('WESLEY YAMAZACK') + ', ' + QuotedStr('M') + ') '; FCmnd.Prepare; FCmnd.ExecuteQuery; FCmnd.Close; end; end; <br clear="all"> UpdateComand procedure TDBExpressTest.UpdateComand; begin FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection( FConnectionName,FUserName, FPassword); if FDBXConn <> nil then begin FCmnd := FDBXConn.CreateCommand; FCmnd.Text := ' UPDATE CLIENTE '+ ' SET DESCRICAO = ' +QuotedStr('WESLEY Y.') + ' WHERE IDCLIENTE = 11'; FCmnd.Prepare; FCmnd.ExecuteQuery; FCmnd.Close; end; end; DeleteComand procedure TDBExpressTest.DeleteComand; begin FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection( FConnectionName,FUserName, FPassword); if FDBXConn <> nil then begin FCmnd := FDBXConn.CreateCommand; FCmnd.Text := 'DELETE FROM CLIENTE ' + ' WHERE IDCLIENTE = 11'; FCmnd.Prepare; FCmnd.ExecuteQuery; FCmnd.Close; end; end;
Listagem 5

Com isso encerro esta segunda parte das dicas do novo DBExpress, porém tem muito mais coisas além destas duas partes que mostrei a vocês, podem notar que na pasta de instalação do Delphi 2010, por exemplo, tem uma pasta com o código fonte das units, veja o caminho, C:\Program Files\Embarcadero\RAD Studio\7.0\source\, para pesquisar mais units, analise nesta pasta.

Olá galera, nesta Quick Tips, irei continuar falando sobre o novo DBExpress que temos no Delphi, vamos ver agora a parte de Transações com o novo DBExpress, veja como é simples trabalhar com transações.

Temos um Objeto do tipo TDBXTransaction, este por sua vez controla as transações que temos. Veja o exemplo com duas tabelas envolvidas, Cliente e TipoCliente observe a imagem abaixo

Na procedure DeleteComand, estou executando 3 comandos :

  1. Deletar o IDCliente = 11 , sem problemas
  2. Deletar o IDTipoCliente = 4 , temos problemas pois existe um IDCliente que utiliza este valor 4, ao executarmos irá gerar um erro de restrição de Chave Estrangeira.
  3. Deletar o IDCliente = 12 , sem problemas porém este comando não será executado, devido ao segundo passo ter apresentado um erro.
procedure TDBExpressTest.DeleteComand Var DBXTrans: TDBXTransaction; begin FDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection( FConnectionName,FUserName, FPassword); if FDBXConn <> nil then begin Try {“Startamos” a transação} DBXTrans := DBXConn.BeginTransaction(TDBXIsolations.ReadCommitted); FCmnd := FDBXConn.CreateCommand; {Primeiro Comando} FCmnd.Text := 'DELETE FROM CLIENTE ' + ' WHERE IDCLIENTE = 11'; FCmnd.Prepare; FCmnd.ExecuteUpdate; FCmnd.Close; {Segundo Comando} FCmnd.Text := 'DELETE FROM TIPOCLIENTE ' + ' WHERE IDTIPOCLIENTE = 4’; FCmnd.Prepare; FCmnd.ExecuteUpdate; FCmnd.Close; {Terceiro Comando} FCmnd.Text := 'DELETE FROM CLIENTE ' + ' WHERE IDCLIENTE = 12'; FCmnd.Prepare; FCmnd.ExecuteUpdate; FCmnd.Close; {“Comitamos” a transação} DBXConn.CommitFreeAndNil(DBXTrans); Except {Roolback na transação quando encontramos um erro} DBXConn.RollbackFreeAndNil(DBXTrans); ShowMessage('Um Erro ocorreu!!!!'); End; end; end;
Listagem 6
Nota: Caso você não utilize transações, e se seguir este exemplo você verá que o primeiro script será executado, já o segundo e terceiro não, agora será que é realmente interessante executarmos somente dos scripts ? Esta resposta vocês que tem que saber, utilizar transações torna sua aplicação confiável, pois imagina se você for registrar uma venda, e no meio do registro de itens, tem um item que de alguma forma gera um erro, o que acontece com a sua venda ? Atualização do estoque ? E por ai vai o seu problema, em faze de teste tudo funciona agora quando implementamos a solução numa base de produção os erros começam a aparecer, então muito cuidado com mestre detalhe principalmente. Transação garante sua execução ser 100% confiável.
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados