[firebase-br] Erro TransactionID invalido!!
Pineli
carlospineli em gmail.com
Sex Mar 30 15:24:59 -03 2007
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
>
Mais detalhes sobre a lista de discussão lista