[firebase-br] Reconexão

firebase em dominioinf.com.br firebase em dominioinf.com.br
Seg Mar 2 12:24:25 -03 2015


Bom dia BZottis,

Obrigado pela Resposta.

Fiz alternadamente e com os dois juntos e o erro aparece,
mas percebi nos meus testes o seguinte, quando tento reabrir a primeira 
vez,
funciona, o sistema reconecta. Então disconecto novamente simulando uma 
outra queda de rede, então na segunda vez gera esse erro e so 
finalizando o sistema para voltar a funcionar, não adianta fechar 
database ou fechar transaction, não da pra entender, parece que ele 
trava nesse erro.

Se tiver mais alguma sugestão

Grato
Rodrigo


Em 2015-03-02 09:17, bzottis em ig.com.br escreveu:
> Bom Dia.
> 
> tente dar um rolback e depois um novo startTransaction antes de abrir 
> os
> datasets, ou se não funcionar
> 
> apenas o rolback ou apenas o novo StartTransaction
> 
> Em 28/02/2015 16:40, firebase em dominioinf.com.br escreveu:
> 
>> Boa tarde BZottis,
>> 
>> Obrigado pela resposta,
>> 
>> Fiz uma rotina onde reabre o database e as tabelas que estao abertas,
>> porem ele gera o seguinte erro quando vou reabrir as tabelas:
>> 
>> ISC ERROR CODE: 335544332
>> ISC ERROR MESSAGE:
>> invalid transaction handle(expecting explicit transaction start)
>> 
>> ja tentei fazer de algumas formas mas sem sucesso
>> 
>> DMX.IBOTransaction1.Close;
>> tentativa:= 0;
>> while not DMX.IBOTransaction1.InTransaction do begin
>> tentativa:= tentativa + 1;
>> DMX.IBOTransaction1.StartTransaction;
>> 
>> if Tentativa > 20 then
>> break;
>> end;
>> 
>> fiz essa rotina para verificar a transação, mas tambem não deu certo.
>> 
>> Tem alguma ideia do que eu possa estar fazendo errado?
>> 
>> Grato
>> Rodrigo
>> 
>> Em 2015-02-27 09:28, bzottis em ig.com.brescreveu:
>> acredito que se fizer algo para identificar qual processo você esta, 
>> usando o exemplo que você mencionou da Venda, faz funções para reabrir 
>> as tabelas necessárias para abria cada operação, exemplo de uma 
>> operação: "VENDA" quando abre uma venda, marca uma variável como 
>> "VENDA" e se cair a conexão, ao tentar reabrir, chama a função 
>> abreOperacao(tipo : string): boolean; e esta conteria todos os 
>> comandos para cada operação if abreOperacao('VENDA') then Begin 
>> showmessage('Conexão Reaberta com sucesso'); end; e a função seria 
>> algo como: if tipo = 'VENDA' then begin tabelaPedido.open; 
>> tabelaItem.open; etc end; se você sempre Marcar qual pedido estava 
>> sendo manipulado, em uma variável da até para recuperar o que estava 
>> comitado na hora. espero que ajude. Em 26/02/2015 19:14, 
>> firebase em dominioinf.com.brescreveu: Boa noite Gladiston, Obrigado pela 
>> resposta. Sim, gostaria de simular um problema de rede e não de 
>> desconexão pelo usuario. Imagine a situação. Tenho um
> database ligado em rede e 20 tabelas abertas. Estou chutando esse
> valor, dependendo dos modulos que o cliente usa, podem ser mais ou
> menos tabelas abertas. Vamos supor que o cliente esta la fazendo uma
> venda, e derepente cai a rede. O meu sistema avisa o cliente atravez
> de uma mensagem que a rede esta inativa, se ele deseja tentar
> reconectar. Então se o cliente clicar em reconectar, o database
> reconecta caso a rede ja esteja restabelecida. Mas todos os datasets
> que estão abertos fecham. E é essa situação que acaba gerando varios
> problemas, porque as tabelas que estavam abertas e sendo utilizadas,
> agora estão fechadas. Esse é o meu problema. Gostaria de saber se tem
> como fazer algo para que os datasets não fechem quando haver uma falha
> de rede, ou reabrirem quando o database se reconectar, sei la. Grato
> Rodrigo Em 2015-02-26 13:30, Gladiston Santana escreveu: A capacidade
> de resiliência de uma conexão em servidores remotos é na maior parte
> igual entre todos. Mas você tem
> que estabelecer a diferença entre *perda* de conexão e conexão
> *terminada*. Perda de conexão é algo físico, ocorre abruptamente em
> qualquer lugar, se não for recuperada e isso não depende do seu
> programa, mas do protocolo de rede então o servidor queima essa
> conexão dando rollback em tudo que estava pendente alí. Isso é igual a
> todos os servidores RDBMS. Conexão terminada está associado a métodos
> de programação que finalizaram a sessão por alguma razão que não
> envolve nenhum problema com o hardware. O IBO sabe quando a conexão é
> terminada e programaticamente voce pode estabeceler uma nova conexão,
> mas o problema é que você tem de saber o que se estava fazendo para
> recuperar-se da situação. Imagina que isso aconteceu quando um loop
> populava uma lista de clientes, então o código que refaz a conexão tem
> de ser sensivel ao contexto, você vai saber onde uma perda de conexão
> vai ocorrer? pouco provável, então o mais sensato é seu codigo que usa
> momentos
> de acesso a dados ser sensivel a perda da conexão e chamar metodos de
> recuperação. Ou seja, não basta ter um evento OnDisconect, suas
> leituras ao banco tem que usar uma especie de try...except e contornar
> o erro. Programadores que usam objetos visuais colocam seus
> componentes de conexão a banco de dados num datamodulo e os forms
> recebem apenas os datasources, toda conexão/reconexão é avaliada num
> unico lugar, isto é, no datamodulo. Com isso, diminuem a chance de
> problemas. Eu uso uma abordagem diferente, prefiro que cada form tenha
> sua própria conexão e resiliência, faço isso componetizando ou criando
> classes. Também há a possibilidade de programar usando datasnap, este
> sim, resolve seu problema com resiliencia do começo ao fim. Tudo foi
> cacheado, e trabalha-se offline o tempo todo até encontrar um .apply
> inte+ Em 23 de fevereiro de 2015 18:44, <firebase em dominioinf.com.br>
> escreveu: Bom dia Gladiston, Obrigado pela resposta. Sobre o
> commitaction não é o problema. O
> problema é com a reconexão. O sistema fica com varios datasets abertos
> e são muitos. Quando ocorre uma queda de conexão, o sistema tenta
> reconectar e consegue, o problema é que quando o IBODatabase fecha,
> ele fecha todos os datasets que estão ligados a ele, e como não faço
> ideia de quantos sao e como estao abertos (suas instruções sql), eu
> tenho que reiniciar o sistema e abri-lo novamente, para todos os
> datasets se reorganizarem. Isso não ocorre no mysql por exemplo.
> Quando a conexão cai, usando o zeos com zconection.reconect o sistema
> reconecta e todos os datasets que estavam abertos, permanecem abertos,
> e o sistema refaz a ultima operação sem problema nenhum. Gostaria de
> saber se existe algo parecido no IBO.
> ______________________________________________ FireBase-BR
> (www.firebase.com.br [1] [1]) - Hospedado em www.locador.com.br [2]
> [2] Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3] [3] Para
> consultar
> mensagens antigas: http://firebase.com.br/pesquisa [4] [4]
> ______________________________________________ FireBase-BR
> (www.firebase.com.br [1] [1]) - Hospedado em www.locador.com.br [2]
> [2] Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3] [3] Para
> consultar mensagens antigas: http://firebase.com.br/pesquisa [4] [4]
> Links: ------ [1] http://www.firebase.com.br [1] [2]
> http://www.locador.com.br [2] [3]
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3] [4]
> http://firebase.com.br/pesquisa [4]
> ______________________________________________ FireBase-BR
> (www.firebase.com.br [1]) - Hospedado em www.locador.com.br [2] Para
> saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3] Para consultar
> mensagens antigas: http://firebase.com.br/pesquisa [4]
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br [1]) - Hospedado em www.locador.com.br
> [2]
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107 [3]
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa [4]
> 
> 
> 
> Links:
> ------
> [1] http://www.firebase.com.br
> [2] http://www.locador.com.br
> [3] http://www.firebase.com.br/fb/artigo.php?id=1107
> [4] http://firebase.com.br/pesquisa
> ______________________________________________
> 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




Mais detalhes sobre a lista de discussão lista