[firebase-br] Dica para fechar a Transacao de Leitura do DBExpress
Francisco Thiago
jeandeadlucky em yahoo.com.br
Ter Jun 21 17:56:50 -03 2005
Grande dica PHA.....
Mas não teria o mesmo efeito de um KeepConnection = False?
[]'s
Francisco Thiago de Almeida
Enter&Plug Sistemas
Divisão: Desenvolvimento / Banco de dados
Franca - SP
----- Original Message -----
From: "Pha-Lista" <lista em pha.com.br>
To: <lista em firebase.com.br>
Sent: Tuesday, June 21, 2005 3:03 PM
Subject: [firebase-br] Dica para fechar a Transacao de Leitura do DBExpress
>
> Internamente o DBExpress abre uma transacao para leitura se nao hourve
> nenhuma iniciada explicitamente, esta transacao fica em aberto (pelo meno
> no driver do Delphi 6), se estiver tendo problemas com perfomance por
> causa desta transacao tente utilizar o exemplo abaixo para fechar a
> conexao e com isso a transacao, quando for necessario o proprio DBExpress
> abrira novamente a conexao.
>
> Cuidado com a propriedade PacketRecords > 0, pois o ClientDataSet nao
> fechara o SQLDataSet ate que todos os registros tenham sido carregados
> imposibilitando o fechamento da transação, se for necessario crie um
> metodo dos ClientDataSets
>
> serem carregado em segundo plano ao poucos para isso voce podera utilizar
> um Action, um Timer ou usar o evneto OnIdle do TApplication.
>
>
> procedure TForm1.SQLConnection1AfterConnect(Sender: TObject);
> begin
> IniciadaEm := Now; // Variavel definida no Form ou Data Modulo da Conexao
> Timer1.Interval := 5000; // checa a cada 5 segundos
> Timer1.Enabled := True;
> end;
>
> procedure TForm1.SQLConnection1AfterDisconnect(Sender: TObject);
> begin
> IniciadaEm := 0;
> Timer1.Enabled := False;
> end;
>
> procedure TForm1.Timer1Timer(Sender: TObject);
> var
> I: Integer;
> begin
> // Verifica se a conexao pode ser fechada
> if (IniciadaEm <> 0) and
> // Configurei para tem tentar fechar depois de 30 minutos
> (DateUtils.MinutesBetween(Now, IniciadaEm) > 30) and
> (SQLConnection1.Connected) and
> (SQLConnection1.ConnectionState = csStateOpen) and
> (not SQLConnection1.InTransaction) then begin
>
> // Verifica se nao ha nenhum SQLDataSet aberto
> for I := 0 to SQLConnection1.DataSetCount - 1 do
> if (SQLConnection1.DataSets[I].State <> dsInActive) then Exit;
>
> SQLConnection1.Close;
> end;
> end;
>
>
> Existem outra formas mais eficientes, mais os componentes ou o driver
> precisariam ser alterados.
>
> Para quem utiliza o DBExpress e o Midas, existe um site muito interessante
> www.distribucon.com
>
> Pode ser que no Delphi 2005, isso ja esteja corrigido.
>
> PHA
> Nova Odessa / SP - Brazil
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> --
> No virus found in this incoming message.
> Checked by AVG Anti-Virus.
> Version: 7.0.323 / Virus Database: 267.7.9/23 - Release Date: 20/06/2005
>
>
_______________________________________________________
Yahoo! Acesso Grátis - Internet rápida e grátis.
Instale o discador agora! http://br.acesso.yahoo.com/
Mais detalhes sobre a lista de discussão lista