Re: [firebase-br] ID de Transacao em DbExpress, contribuição e ...
Paulo Geloramo
paulogeloramo em terra.com.br
Qua Ago 2 12:01:53 -03 2006
Antonio Carlos,
O TransactionID tem que ser único somente na aplicação,
basta numerar suas transações explicitas a partir
de 1000, por exemplo, TransactionID = 1000,
para não conflitar com as transações implicitas
que inciam a partir de 1.
Faz um teste numerando suas transações explicitas
a partir de 1000 e execute a mesma transação em
50 máquinas, veja se tem problemas com transação
com mesmo ID.
[]s
Paulo Geloramo
-----Mensagem Original-----
De: "Antonio Carlos" <a.lima.silva em terra.com.br>
Para: "FireBase" <lista em firebase.com.br>
Enviada em: sábado, 29 de julho de 2006 08:58
Assunto: [firebase-br] ID de Transacao em DbExpress, contribuição e ...
Caros companheiros de lista,
Na literarura encontramos diversos exemplos de como realizar transações com
o DbExpress. Contudo, todos esses exemplos fundamentam-se em um ambiente
Local ou onde apenas uma estacao acessa a base de dados pois utiliza um
TransactionID := 1
Na prática em uma aplicação multiusuario ao manter esse exemplo clássico
acabamos por receber diversas mensagens de erro do firebird informando que a
transação ja existe com esse ID.
Eu usei o seguinte metodo para resolver isso :
i := 0;
while i = 0 then i := Randon(6500);
TransactionID := i;
Outra forma que um companheiro em uma lista delphi demonstrou foi :
function NewTransactionID: LongWord;
var
lGUID: TGUID;
begin
CreateGUID(lGUID);
Result := lGUID.D1;
end;
Ocorre que a cada numero gerado ocorre uma pequena probabilidade de ser
gerado em outra estação ( imagine onde existam muitas ) de ser gerado o
mesmo numero , e isso aconteceu comigo em um cliente.
Me sugeriram n formas de gerar um id unico ( IP, IP+Hora, etc.. ) a que eu
mesmo encontrei foi :
TransactionID := Application.Handle em Delphi 7 ou TransactionID :=
HInstance em D2005
Isso resolve a questão do ID da transação realmente ? Veja que cada estacão
irá ter esse ID diferente , mas ele não ira variar na estacão. Por lógica ,
se abro a transação e fecho com um Id 123456 e novamente abro a transação e
fecho com um Id 123456 teoricamante não haverá problemas .
O que os companheiros podem acrescentar ?
Antonio Carlos
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista