[firebase-br] Dica para fechar a Transacao de Leitura do DBExpress

Pha-Lista lista em pha.com.br
Seg Jun 27 07:06:34 -03 2005


Nao achei o exemplo muito bom, o correto neste caso seria criar um Descendente do TIBDataSet e alterar os metodos PSStarTransaciton e PSEndTransaction.

Alem do mais isso os metodos acima ja fazem, e com a diferenca e executar Commit que e muito mais eficiente.

Procure nos fontes do IB e verifique como estes metodos estao sendo implementados.

PHA
Nova Odessa / SP - Brazil

-----Mensagem original-----
From: Joseh-Henrique jhlistas em ig.com.br
Date: Fri, 24 Jun 2005 14:50:45 -0300
To: FireBase lista em firebase.com.br
Subject: Re: [firebase-br] Dica para fechar a Transacao de Leitura do DBExpress

> Pha-Lista escreveu:
> 
> >Existem outra formas mais eficientes, mais os componentes ou o driver pr> ecisariam ser alterados.
> >
> >  
> >
> Ola, vi seus exemplos e fiquei interessado nessas outras formas q vc 
> disse, hoje eu uso IBX + TDataSetProvider +  TClientDataSet  e a forma q 
> eu encontrei de fechar a transacao foi ficar dando CommitRetaining, uma 
> solucao porca, e verdade, mas que funciona e tem seus efeitos 
> colaterais, como por exemplo, ao fechar o formulario eu tenho q fechar a 
> transacao "na mão".
> Ha sim, vale dizer que este problema so acontece com clientdataset 
> aninhados.
> Segue o componente derivado que catei em algum lugar da  net
> 
> unit IBProvider;
> 
> interface
> 
> uses
>   Provider;
> 
> type
>   TIBProvider = class(TDataSetProvider)
>   private
>     { Private declarations }
>   protected
>     { Protected declarations }
>     function InternalApplyUpdates(const Delta: OleVariant; MaxErrors:  
> Integer;
>       out ErrorCount: Integer): OleVariant; override;
>   public
>     { Public declarations }
>   published
>     { Published declarations }
>   end;
> 
> implementation
> 
> uses Db, IBCustomDataSet, MidConst;
> 
> { TIBProvider }
> 
> function TIBProvider.InternalApplyUpdates(const Delta: OleVariant;
>   MaxErrors: Integer; out ErrorCount: Integer): OleVariant;
> begin
>   if not Assigned(DataSet) then DatabaseError(SMissingDataSet);
>   with DataSet as TIBCustomDataSet do
>   begin
>     if Transaction.Active then
>       Transaction.CommitRetaining
>     else
>       Transaction.StartTransaction;
> 
>     try
>       Result := inherited InternalApplyUpdates(Delta, MaxErrors, 
> ErrorCount);
>     finally
>       if ((ErrorCount <= MaxErrors) or (MaxErrors = -1)) then
>         Transaction.CommitRetaining
>       else
>         Transaction.RollbackRetaining;
>     end;
>   end;
> end;
> end.
> 
> []'s
> Joseh-Henrique
> Goiania, GO
> 
> >Para quem utiliza o DBExpress e o Midas, existe um site muito interessan> te 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
> >
> >
> >  
> >
> 
> 
> ______________________________________________
> 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





Mais detalhes sobre a lista de discussão lista