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

Joseh-Henrique jhlistas em ig.com.br
Sex Jun 24 14:56:51 -03 2005


Pha-Lista escreveu:

>Existem outra formas mais eficientes, mais os componentes ou o driver precisariam 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 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
>
>
>  
>





Mais detalhes sobre a lista de discussão lista