Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Boa tarde,

   Estou utilizando o Firedac conectando em um banco postgres remoto.  A aplicação é responsável por transferir dados locais gravados no firebird para essa base postgres. A cada 30 segundos, por exemplo, eu testo se tem conexão e faço a sincronização dos dados.

      FDConnection.Connected := False;
      FDConnection..Connected := True;

   O problema é que se eventualmente a conexão com o banco postgres remoto cair, por exemplo, der algum problema na rede, no momento que faço o comando acima, ele cria uma nova conexão, deixando a conexão que caiu aberta, assim ele duplica as conexões.

   Parece que ao cair a conexão ele perde a referencia com o componente, e na hora que faz o comando Connected := False; ele não elimina a mesma.

  Alguém já passou por algo semelhante e contornou a situação? Em casos de acesso a bancos remotos qual o melhor procedimento.

 

Desde já agradeço.

 

  • 7 anos depois...
Postado (editado)

Depois de bater cabeça, pesquisando, testando, descobri uma forma de resolver esse problema e outros como a lentidão eventual na consulta no DB. No meu caso o cliente abria o sistema, deixava parado por alguns minutos e no primeiro Insert ou Select o tempo de resposta demorava 30 segundos, somente na primeira consulta, depois funcionava perfeitamente, não apresentava erro. Verifique nas propriedades do FDConnection em ResourceOptions, AutoReconnect está marcada como True, no seu Form principal coloque um Timer para executar a cada 30 segundos o FDConnection.Ping. Quando uma conexão está inativa, o método Ping tenta abrir uma conexão.

Observações: banco PostgresSQL remoto, isso acontecia quando a latência entre o cliente e o servidor passava de 20ms

Fontes do que estou explicando: 

https://docwiki.embarcadero.com/Libraries/Athens/en/FireDAC.Comp.Client.TFDCustomConnection.Ping

Editado por Junior Dias
Postado
Em 30/08/2024 at 23:18, Junior Dias disse:

Depois de bater cabeça, pesquisando, testando, descobri uma forma de resolver esse problema e outros como a lentidão eventual na consulta no DB. No meu caso o cliente abria o sistema, deixava parado por alguns minutos e no primeiro Insert ou Select o tempo de resposta demorava 30 segundos, somente na primeira consulta, depois funcionava perfeitamente, não apresentava erro. Verifique nas propriedades do FDConnection em ResourceOptions, AutoReconnect está marcada como True, no seu Form principal coloque um Timer para executar a cada 30 segundos o FDConnection.Ping. Quando uma conexão está inativa, o método Ping tenta abrir uma conexão.

Observações: banco PostgresSQL remoto, isso acontecia quando a latência entre o cliente e o servidor passava de 20ms

Fontes do que estou explicando: 

https://docwiki.embarcadero.com/Libraries/Athens/en/FireDAC.Comp.Client.TFDCustomConnection.Ping

@Junior Dias muito obrigado pelo retorno. Na época usava o componente dbexpress via odbc agora migrei para o firedac com comunicação direta por dll e melhorou bastante. Utilizo isso em um PDV e o postgres seria o banco da retaguarda. Oque vejo ainda é que em determinados momentos que o banco fica muito lento por algum problema no servidor, a aplicação fica sem resposta e trava, parece que não respeita o timeout. 

Vou verificar essa questão do Ping para ver se atende oque preciso.

 

Postado

Este cenario com banco de dados ja foi discutido em outros tópicos e sempre caimos nas mesmas armadilhas. 

Nestes casos considerem uma api, garanto que tera muito menos dor de cabeça. 

Ambiente com bancos remotos, devem ser em camadas, sem duvida.

O Horse é um bom principio para isto, não sai da zona de conforto do delphi e aceita quase totalmente as tecnologias para tais serviços, criando itens de segurança e trabalha bem com muita informação.

Captura de tela 2024-07-23 103314.png

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.