[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