[firebase-br] Transação.

Anderson Miranda Barrozo andersonpaduarj em gmail.com
Seg Out 27 20:31:27 -03 2008


*Criar variavel Transc na seção public da unit:*
**
     Transc:TTransactionDesc;


*Chamada da rotina em sua aplicação Delphi:*

  frmDm.Start;    /* Chama rotina Stard para iniciar a transação */
  try
    with spBloqueio_IU do
    begin
      Params[0].AsInteger := cdsBloqueioBLOCODIGO.AsInteger;
      Params[1].AsString  := cdsBloqueioBLOMOTIVO.AsString;
      Params[2].AsString  := cdsBloqueioBLOSOLUCAO.AsString;
      ExecProc;
      frmDm.Comit;      /* Chama rotina Comit para gravar os registros */
      if Params[3].AsInteger > 0 then
         cdsBloqueioBLOCODIGO.AsInteger := Params[3].AsInteger;
    end;
  except
    on E: EDatabaseError do   /* Se der algum erro ao comitar */
       begin
         frmDm.Rollback;       /* Chama rotina Rollback para cancelar tudo
*/
         frmDm.ControleErro(E);     /* Chama rotina para mostar o erro */
       end;
  end;


*Rotinas utilizadas na chamada:*

procedure TfrmDM.Comit;
begin
  Conexao.Commit(Transc);
end;

procedure TfrmDM.Rollback;
begin
  Conexao.Rollback(Transc);
end;

procedure TfrmDM.Start;
begin
  Transc.IsolationLevel := xilREADCOMMITTED;
  Transc.TransactionID  := StrToInt(IDTransaction);
  Conexao.StartTransaction(Transc);
end;
Procedure TfrmDm.ControleErro(E: EDatabaseError);
var
  Mensagem  :string;
begin
  if Pos('VIOLATION OF FOREIGN KEY',UpperCase(E.Message)) > 0 then
  begin
     Mensagem := 'Registro em Uso por outra Tabela, não pode ser excluído.';
  end
  else if Pos('CHECK CONSTRAINT',UpperCase(E.Message)) > 0 then
  begin
    Mensagem :='Verifique os dados informados!';
  end
  else if Pos('VALIDATION ERROR FOR COLUMN CIDESTADO',UpperCase(E.Message))
> 0 then
  begin
    Mensagem :='Valor inválido para o campo UF!';
  end
  else if Pos('VALIDATION ERROR FOR COLUMN CLICOBUF',UpperCase(E.Message)) >
0 then
  begin
    Mensagem :='Valor inválido para o campo UF endereço cobrança!';
  end
  else if Pos('VALIDATION ERROR FOR COLUMN ESTADO',UpperCase(E.Message)) > 0
then
  begin
    Mensagem :='Valor inválido para o campo UF!';
  end
//  else if Pos('VALIDATION ERROR FOR COLUMN',UpperCase(E.Message)) > 0 then
//  begin
//    Mensagem :='Valor inválido!';
//  end
  else if Pos('EXCEPTION 1',UpperCase(E.Message)) > 0 then
  begin
    Mensagem := MSG_DUPLICIDADE;
  end
  else if Pos('EXCEPTION 2',UpperCase(E.Message)) > 0 then
  begin
    Mensagem := MSG_FALTAESTOQUE;
  end
  else if Pos('STORE DUPLICATE VALUE',UpperCase(E.Message)) > 0 then
  begin
    Mensagem := 'Você está tentando gravar um valor que não pode ser
repetido.';
  end
  else if Pos('VIOLATION OF PRIMARY OR UNIQUE KEY',UpperCase(E.Message)) > 0
then
  begin
    Mensagem :='Já Existe um Registro Cadastrado com Este Código.';
  end
  else if Pos('RECORD NOT FOUND OR CHANGED BY ANOTHER
USER.',UpperCase(E.Message)) > 0 then
  begin
    Mensagem := 'Registro não encontrado ou modificado por outro usuário.';
  end
  else
    Mensagem := E.Message;
  raise EDatabaseError.Create(Mensagem);
end;



2008/10/27 Felipe Barros <felipeaguiarbarros em yahoo.com.br>

> boa tarde.
>
> gostaria de saber o seguinte:
>
> como eu faço para numa sp iniciar uma transação ?
> preciso criar uma nova transação.
>
> obrigado.
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AS Informática
Anderson Miranda Barrozo
(22) 8115-8761
MSN: andersonpaduarj em hotmail.com



Mais detalhes sobre a lista de discussão lista