[firebase-br] Reconexão

bzottis em ig.com.br bzottis em ig.com.br
Sex Fev 27 09:28:19 -03 2015


 

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.br escreveu: 

> 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]) - 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



Mais detalhes sobre a lista de discussão lista