[firebase-br] Reconexão

bzottis em ig.com.br bzottis em ig.com.br
Seg Mar 2 09:17:34 -03 2015


 

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



Mais detalhes sobre a lista de discussão lista