[firebase-br] Erro TransactionID invalido!!

Julio Cesar julio_gyn em yahoo.com.br
Dom Abr 1 13:51:56 -03 2007


se eh td tao rapido e ta trabalhando com threads usa secoes criticas dentro 
das threads, ai acho q as coisas se resolvem....

-- 


Julio Cesar
+353 87 2184139
+353 (0)91 630317


"Pineli" <carlospineli em gmail.com> wrote in 
message news:e8f2479a0703301124h401ed164u94a6b1513b89946b em mail.gmail.com...
putz galera...nada a ver essa discucao da porra...

ja fiz de todo jeito.... é muito rapido...nao da conta de gravar no db

Em 30/03/07, Kleber Caneva<kdcc em terra.com.br> 
escreveu:
> A linha
>       TransacaoSQL.TransactionID := IDTransacao; //1;
> contradiz sua informação que " D transacao estou gerando o valor
> aleatoriamente"
>
> Esse codigo sugere que você está usando Selec MAX
>     DM.SQLUltimoCod.Close ;
>     DM.SQLUltimoCod.Open  ;
>    codigonovo := inttostr( DM.SQLUltimoCod.Fields[0].AsInteger + 1);
>
> Substitua por GENERATOR, eles existem pra isso.
>
> []´s
>
> Kléber Caneva
>
>
> ----- Original Message -----
> From: "Pineli" <carlospineli em gmail.com>
> To: <lista em firebase.com.br>; 
> <pineli em ecp.com.br>
> Sent: Friday, March 30, 2007 8:34 AM
> Subject: [firebase-br] Erro TransactionID invalido!!
>
>
> Ola para todos....
> estou fazendo uma aplicacao com firebird 1.5 embarcado + delphi 7.
> recebo centenas de eventos através de 1 sockets e preciso gravar tudo
> no banco...
> só que tudo acontece muito rápido e esta dando erro após a quinta
> conexao. Qual uma maneira segura de gravar tudo com segurança... estou
> fazendo assim:
>
> tem um data modulo com a conexao
> e cada conexao do socket cria uma thread com o codigo abaixo. Criando
> um query tbm para cada.
> O ID transacao estou gerando o valor aleatoriamente para tentar nao 
> repetir
> (...)
>
> DM.SQLUltimoCod.Close ;
> DM.SQLUltimoCod.Open  ;
> codigonovo := inttostr( DM.SQLUltimoCod.Fields[0].AsInteger + 1);
>
> //gravando informacao no banco de dados
>
> SQLQueryThread.Close     ;  // Não sei se já tava aberta, então fecho
> SQLQueryThread.SQL.Clear ;
> SQLQueryThread.SQL.Add('INSERT INTO EVENTOS(ID_EVENTOS, EVENTO, IP) ');
> SQLQueryThread.SQL.Add('VALUES('+CODIGONOVO+','+#39+COPY(RecText,1,4)+#39+','+#39+ClientSocket.RemoteAddress+#39+')')
> ;
>
> Gravou := False;       // Controla se conseguiu ou não gravar
> for i := 1 to 100 do   // Tentativa de gravação por 100 vezes
> begin
>     try
>       TransacaoSQL.TransactionID := IDTransacao; //1;
>       TransacaoSQL.IsolationLevel := xilREPEATABLEREAD ;
>       DM.SQLConexao.StartTransaction( TransacaoSQL ) ;
>       SQLQueryThread.ExecSQL( True ) ;
>       DM.SQLConexao.Commit( TransacaoSQL ) ; // Efetiva gravação
>       Gravou := True;   // Se chegou aqui é pq conseguiu gravar
>     except
>       on e:Exception do
>       begin
>          DM.SQLConexao.Rollback( TransacaoSQL ); // Desfaz alteraes
>          Erro   := e.Message;
>          Gravou := False    ;   // Faiô, tio!
>       end;
>     end;
>     if Gravou then   // Conseguiu gravar, iupiiiii!
>        break         // Sai do 'For'
>     else
>        Sleep(1000);  // Espera 1 segundo antes de ir p/ prox. passo do 
> 'For'
> end;
> if not Gravou then   // Faiô mesmo, depois de 100 tentativas :-(
> begin
>    ShowMessage(Erro);   // Mostra mensagem de erro
> (....)
>
> quando ocorre o erro ele esgora as 100 tentativas....
> Como fazer isso de uma forma mais segura??????
>
> ______________________________________________
> 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
>
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 29/03/2007 / Versão:
> 5.1.00/4995
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>
>
>
> ______________________________________________
> 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
>

______________________________________________
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