Quick Tips : Conhecendo o no DBExpress - Parte III

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

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



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;

 

Observação: 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.

 

 

Fico por aqui ate à próxima Quick Tips

 

 

Um abraço

 

Wesley Y

wyamazack@rwsolution.com.br

 

 
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?