Re: [firebase-br] Transações Duplicadas
Paulo Geloramo
paulogeloramo em terra.com.br
Qua Dez 28 08:55:49 -03 2005
Adilson,
Efetua_Processo.TransactionID := 100;
Use noTransactionID numeros apartir de 100,
nao use numeros baixo, por exemplo, 1, pois
esta conflitando com a transacao automatica
que o DataSetProvider inicializa.
[]s
Paulo Geloramo
-----Mensagem Original-----
De: "Adilson B. Cápua Jr." <juniorcapua em yahoo.com.br>
Para: "'FireBase'" <lista em firebase.com.br>
Enviada em: quarta-feira, 28 de dezembro de 2005 00:55
Assunto: RES: [firebase-br] Transações Duplicadas
Pois é, Cristiano, creio que o problema é o Identificador da transação!
Imaginei isso em primeira instância, mas queria ter certeza... Veja bem,
dentro do bloco try...except chamo algumas outras procedures para realizar
tarefas secundárias, como imprimir um certo "comprovante" do processo,
etc...
Mas acho que se houvesse algum problema ali, o except pegaria... Imagino
que seja mesmo isso!!! Vou criar um identificador único para cada estação
e ver se resolve o problema... Seria alterar essa linha abaixo?
Efetua_Processo.TransactionID := 1;
E trocar esse 1 por um variável de controle da máquina cliente???
Grato pela ajuda!!!
+---------------------------------------+
Adilson Bragança Cápua Jr.
Linhares - ES Brasil
mailto : juniorcapua em yahoo.com.br
juniorcapua em gmail.com
Mobile : abcjr em oi.com.br
Messenger : juniorcapua em hotmail.com
Skype : dellas_capua
Blogger : www.dellas.rg3.net
+---------------------------------------+
Save a tree! Send an e-mail!
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Cristiano Testaí
Enviada em: terça-feira, 27 de dezembro de 2005 20:08
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Transações Duplicadas
Vc já depurou o programa e confirmou que o erro acontece dentro do bloco
try...except? Se sim, deveria entrar no bloco except, ao menos que vc
execute determinados métodos que mesmo com try...except nao sao tratados,
como um ApplyUpdates do ClientDataSet, onde vc precisa manipular o evento
OnReconcilerError.
De acordo com o erro parece que esta sendo violado o identificador da
transação, ou seja, parece que esta sendo startada duas transações com o
mesmo ID(Efetua_Processo.TransactionID), o que não é permitido.
Espero ter ajudado,
[]´s
Cristiano Testaí
"Adilson B. Cápua Jr." <juniorcapua em yahoo.com.br> wrote in message
news:25721.3585115553$1135719611 em news.gmane.org...
PessoALL,
Tenho um programa já funcionando há mais de 1 ano!
O mesmo foi desenvolvido em Delphi 7 + DBExpress + Firebird 1.5! Bom,
recentemente um usuário numa rede com 15 máquinas me reportou que direto
quando vai fazer um certo processo recebe uma mensagem de erro informando
que há uma duplicação de transação...
Bom, como já tinha visto em algumas mensagens, não é uma boa técnica de
programação você deixar uma transação aberta durante muito tempo, portanto,
deixo o usuário fazer tudo que precisa e ao Confirmar o processo,
automaticamente a transação é aberta, é efetuado todo o processo e, se tudo
correu bem é dado o commit, caso contrário, entra em ação o tal do RollBack.
Segue abaixo mais ou menos como faço:
procedure TForm_Processos.Conclusao;
var
Efetua_Processo: Ttransactiondesc;
begin
Processo_Sucesso := False;
Efetua_Processo.TransactionID := 1;
Efetua_Processo.IsolationLevel := xilReadCommitted;
DM.Conexao.StartTransaction(Efetua_Processo);
try
Processo_Sucesso := True;
// Meu código
DM.Conexao.Commit(Efetua_Processo);
except
MessageDlg('Houve um problema ao efetuar processo!' + #13 +
'Informe erro #36 ao nosso suporte!', mtError, [mbOk], 0);
Processo_Sucesso := False;
DM.Conexao.Rollback(Efetua_Processo);
end;
Minha dúvida é a seguinte: será que pode estar havendo algum conflito com o
nome das transações? Tipo assim, dois usuários ao mesmo tempo iniciarem o
processo e o banco se perder e reportar esse erro... Antes de criar uma
possível solução envolvendo uma "identificação de estação" resolvi postar
esta mensagem aqui para ver se é isso mesmo... Devo lembrar que essas
transações são iniciadas, processadas e comitadas instantaneamente, ou seja,
tudo é feito "rapidinho"... Nenhuma delas fica aberta por muito tempo... É
só o tempo do próprio processamento (que por usa vez é muito rápido
também)!!!
O estranho é que o erro não é pego pelo except, ou seja, nosso usuário não
informou para nós o erro número 36 como pede a mensagem e sim informou uma
mensagem em "ingrês" [não sei muito bem como dizer, vou ler o que está
escrito aqui! :) ] dizendo que houve uma duplicação de transação!
Qualquer ajuda é bem vinda...
+---------------------------------------+
Adilson Bragança Cápua Jr.
Linhares - ES Brasil
mailto : juniorcapua em yahoo.com.br
juniorcapua em gmail.com
Mobile : abcjr em oi.com.br
Messenger : juniorcapua em hotmail.com
Skype : dellas_capua
Blogger : www.dellas.rg3.net
+---------------------------------------+
Save a tree! Send an e-mail!
_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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
_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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