[firebase-br] Commit em procedure

Anderson Miranda Barrozo andersonpaduarj em gmail.com
Sáb Jun 7 09:11:52 -03 2008


Grande,

     Segue as rotinas que uso, talvez possa de ajudar em alguma coisa. Boa
Sorte !

//Procedure para executar o comit
procedure TForm1.Comit;
begin
 SQLConnection1.Commit(Trans);
end;

//Procedure para executar o Rollback
procedure TForm1.Rollback;
begin
 SQLConnection1.Rollback(Trans);
 raise Exception.Create('Ocorreu um erro na Transação!');
end;

//Procedure para startar a transação
procedure TForm1.Start;
begin
 Trans.IsolationLevel := xilREADCOMMITTED;
 trans.TransactionID := Strtoint(Idtransaction);
 SQLConnection1.StartTransaction(Trans);
end;

//Procedure para gerar o ID da transação
function TForm1.Idtransaction: string;
var i: integer;
Const str = '0123456789';
begin
 for i:=1 to 2 do
  begin
    Randomize;
    REsult := Result + str[Random(length(str))+1];
  end;
end;

//Exemplo executar
procedure TForm1.Button1Click(Sender: TObject);
begin
   Start;    //Chamo procedure START para abri a transação com start
  Try
    SQLStoredProc1.Params[0].AsInteger := 4;   //Passo parametro 1
StoredProc
    SQLStoredProc1.Params[1].AsString := 'MKTPR';   //Passo parametro 2
StoredProc
    SQLStoredProc1.ExecProc;    //Executo a StoredProc
    Comit;   //Chamo COMIT para comitar a transação
  Except
   Rollback  //Caso dê erro chamo procedure ROLLBACK
  end;
end;
Quando vc chama a EXTRATO_DE_CONTA e dentro dela RECALCULA_SALDO tudo esta
dentro da transação que vc deu o start. Se der o COMIT sem erro tudo será
comitado.

PS. Voce tem que criar a variavel  Trans: TTransactionDesc na sessão PUBLIC;


Anderson Miranda

2008/6/6 Nelson - Terra <nelsonvechini em terra.com.br>:

> Olá
>
>
>
> Tenho uma procedure chamada EXTRATO_DE_CONTA e dentro dela eu chamo uma
> outra procedure (execute procedure RECALCULA_SALDO(:NroConta) ) antes de
> iniciar o extrato, somente para garantir que o saldo está recalculado.
>
>
>
> Bem...o problema é que se um usuário fizer este processo e no mesmo momento
> outro usuário fizer o mesmo relatório ele aparece:
>
> Lock conflict on no wait transaction deadlock
>
> Update conclicts with concurrent update
>
>
>
> E mostra o nome da procedure RECALCULA_SALDO.
>
>
>
> Nesta procedure que recalcula eu faço updat e parece que está faltando
> fazer
> um commit em algum lugar...mas não sei aonde.
>
>
>
> Alguém já passou por isso?
>
>
>
> FB 2.0.4....WIN2003
>
>
>
> Grato
>
>
>
>
>
> Nelson Aparecido Servija Vechini
> Consultoria em Informática
> Tel: (19) 8151-9939
> E-Mail:  <mailto:nelsonvechini em terra.com.br> nelsonvechini em terra.com.br
>
>
>
> ______________________________________________
> 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