Jump to content

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png click.png click.png

Manter a conexão fechada Firebird


RibaSoft
Go to solution Solved by EMBarbosa,
  • Este tópico foi criado há 694 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá a todos!

Gostaria de saber qual a melhor forma para se proceder...

Uso => Lazarus, Firebid 2.5, TIbConnection, TSQLQuery, TSQLTransaction, TDataSource, TDBGrid

Sempre que fecho um Form, depois de executar um commit (Transaction.Commit), ou antes de carregar um DBgrid (Query.Open), eu executo o "Connection.Close(True)" para fechar a conexão fazendo com que eu possa ter sempre os dados que estão no banco e não na memoria.

Essa seria a forma mais correta? Ou existe uma forma melhor?

Desde já agradeço a atenção de todos

Link to comment
Share on other sites

  • Consultores
2 horas atrás, RibaSoft disse:

Gostaria de saber qual a melhor forma para se proceder...

Uso => Lazarus, Firebid 2.5, TIbConnection, TSQLQuery, TSQLTransaction, TDataSource, TDBGrid

Sempre que fecho um Form, depois de executar um commit (Transaction.Commit), ou antes de carregar um DBgrid (Query.Open), eu executo o "Connection.Close(True)" para fechar a conexão fazendo com que eu possa ter sempre os dados que estão no banco e não na memoria.

Essa seria a forma mais correta? Ou existe uma forma melhor?

Olá,

  Eu não tenho trabalhado com esses componentes do Lazarus, mas acredito que não seja necessário você executar um Connection.Close depois de executar o Commit.

  Pelo menos em teoria, o Commit deveria fechar a transação e qualquer comunicação com o BD. Assim, apenas isso deveria bastar.

  Da mesma maneira não deveria ser necessário você executar o close antes de carregar um DBgrid.

  • Like 2

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

Então...

Aparente ele não fecha pois quando dou um commit, ele mostra os dados conforme o terminal que estou usando, se houve alteração por outro terminal ele não mostra, a não ser que eu feche e abra novamente a aplicação. mas fazendo esse Connection.Close(True), ai sim ele busca as informações novamente no banco de dados, e se algum outro terminal fez alguma modificação dai consigo vê-las.

Obrigado pela atenção 🙏

 

Link to comment
Share on other sites

  • Consultores
14 horas atrás, RibaSoft disse:

Então...

Aparente ele não fecha pois quando dou um commit, ele mostra os dados conforme o terminal que estou usando, se houve alteração por outro terminal ele não mostra, a não ser que eu feche e abra novamente a aplicação. mas fazendo esse Connection.Close(True), ai sim ele busca as informações novamente no banco de dados, e se algum outro terminal fez alguma modificação dai consigo vê-las.

Obrigado pela atenção 🙏

 

Será que não está usando o CommitRetaining? Isso poderia explicar manter a conexão.

  • Like 2

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

Aparentemente, eu falei besteira, mas continuo precisando de ajuda.

Quando acesso os dados com o ibexpert e mantenho a tabela aberta, não consigo acessar do meu sistema, provavelmente porque o ibexpert de segurar a conexão aberta, já no meu sistema se a tabela esta aberta (DBGrid Carregado), eu consigo acessar pelo ibexpert pois os dados então em memoria do meu sistema, ou seja meu sistema não segura a conexão.

O que eu estou precisando é que a cada consulta que eu faça no meu sistema ele busque as informações no banco de dados e não as que estão na memoria, e é isso que eu resolvi fechando a conexão antes de cada select com o IBConnection.Close(True); Pois preciso das informações atuais caso outro terminal faça alguma alteração.

E é isso que eu queria saber, qual a melhor maneira de fazer.

Pode ser que seja uma pergunta besta, mas pesquisando a respeito vi muita gente com a mesma dúvida e não consegui achar outra solução.

Edited by RibaSoft
Link to comment
Share on other sites

  • Consultores
  • Solution
Em 03/10/2019 at 23:17, RibaSoft disse:

Quando acesso os dados com o ibexpert e mantenho a tabela aberta, não consigo acessar do meu sistema, provavelmente porque o ibexpert de segurar a conexão aberta, já no meu sistema se a tabela esta aberta (DBGrid Carregado), eu consigo acessar pelo ibexpert pois os dados então em memoria do meu sistema, ou seja meu sistema não segura a conexão.

Isso pode ser o formato da conexão. Não tenho certeza que seja como você diz que os dados estão em memória.

Em 03/10/2019 at 23:17, RibaSoft disse:

O que eu estou precisando é que a cada consulta que eu faça no meu sistema ele busque as informações no banco de dados e não as que estão na memoria, e é isso que eu resolvi fechando a conexão antes de cada select com o IBConnection.Close(True); Pois preciso das informações atuais caso outro terminal faça alguma alteração.

Isso está relacionado ao controle de transações. Eu particularmente não tenho muita experiência com esse componente IBConnection. Mas se o jeito de fechar uma transação é usar o Close, então é isso que você precisa fazer.

Mas o ideal é fechar a transação assim que ela deixar de de ser útil e não antes do próximo Select.

Pra ser mais preciso, eu necessito de um programa que exemplifique o seu problema para analisar aqui na minha máquina.

  • Like 2
  • Thanks 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • 3 weeks later...

Olá, só reportando...

Procurei, pesquisei e testei muito sobre o assunto e até agora o que descobri é que quando o form é destruído, mesmo sem fechar a conexão (IBConnection.Close(True)) ele pega os dados novos no DB, mas se não destruir o form não a nada que de certo, testei varias coisas, varias procedimentos do Transaction, Query, IBConnection, DBGrid e nada.

Só o IBConnection.Close(True) que funciona mesmo. Daí como só da problema se estiver em rede, eu criei uma configuração "ModoRede: Boolean" onde se a aplicação for local deixo como False se for em rede deixo como true para fechar a conexão (IBConnection.Close(True)) antes de cada SQLQuery.Open.

Desculpe ser repetitivo na escrita, é que estou tentando deixar bem claro o que acontece.

Assim que possível anexo um .ZIP aqui com um exemplo da aplicação.

DEUS abençoe a todos.

Obs: Se acharem que o Tópico não agrega nada aos usuários pode fecha-lo, pois não sanou 100% da dúvida, mas na gambiarra ta indo 😊. Brigadão.

 

  • Like 2
Link to comment
Share on other sites

  • Este tópico foi criado há 694 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.