[firebase-br] Reconexão

firebase em dominioinf.com.br firebase em dominioinf.com.br
Sáb Fev 28 16:40:16 -03 2015


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