[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