douglas_k Postado 10 Agosto, 2017 Postado 10 Agosto, 2017 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.
Junior Dias Postado 31 Agosto Postado 31 Agosto (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 31 Agosto por Junior Dias
douglas_k Postado 2 Setembro Autor Postado 2 Setembro 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.
fabiofranzini Postado 2 Setembro Postado 2 Setembro 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.
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora