[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