[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