[firebase-br] Transacoes no DBExpress (Conclusao)

Pha-Lista lista em pha.com.br
Qui Maio 19 07:31:33 -03 2005


Iniciando uma manual antes de fazer uma leitura no banco.

Voce ate pode deixar uma transacao padrao (Global) para isso, o unico incoveniente e que o DataSetProvider nao vai abrir uma transacao para os Updates, voce tera que alterar o TSQLDataSet ou Iniciar e fechar uma outra transacao no ApplyUpdates.

Seria mais ou menos assim.

procedure TForm1.Salvar;
var
  TD: TTransactionDesc;
begin
  TD.TransactionID := 10;
  TD.IsolationLevel := xilREADCOMMITTED;
  SQLConnection1.StartTransaction(TD);
  try
    if (ClientDataSet1.ApplyUpdates(0) = 0) then
      SQLConnection1.Commit(TD)
    else
      SQLConnection1.Rollback(TD);
  except
    SQLConnection1.Rollback(TD);
    raise;
  end;
end;

Na transacao Globa voce de tempos em tempos daria um Commit e iniciava a mesma novamente, o ideal seria iniciar antes de ler e fechar quando nao e mais necessario (O IBO faz isso muito bem), mais para isso os componentes teriao que serem alterados. 

Eu teria que analizar melhor para saber qual a forma mais facil de de fazer isso, pois nao utilizo o DBExpress no Trabalho e nem o FB, voce tera que testar as opicoes.

Em todo o caso, prefiro criar um componente descendente que faça da forma como quero as coisas, gosto de criar componentes.

PHA
Nova Odessa / SP - Brazil

-----Mensagem original-----
From: "Paulo Geloramo" paulogeloramo em terra.com.br
Date: Wed, 18 May 2005 19:48:47 -0300
To: "FireBase" lista em firebase.com.br
Subject: Re: [firebase-br] Transacoes no DBExpress (Conclusao)

> Uma solução que tentei foi fechar a transacao corrente
> no evento onClose do form, mas sem sucesso, pois
> o Commit exige o ID da transação, Como obter o ID da
> transação corrente?
> 
> if SQLConnection1.InTransaction then
>   SQLConnection1.Commit(????);
> 
> []s
> Paulo Geloramo
> 
> 
> -----Mensagem Original----- 
> De: "Pha-Lista" <lista em pha.com.br>
> Para: "FireBase" <lista em firebase.com.br>
> Cc: <cflp_suporte em yahoogrupos.com.br>
> Enviada em: quarta-feira, 18 de maio de 2005 15:50
> Assunto: [firebase-br] Transacoes no DBExpress (Conclusao)
> 
> 
> > Analizando as transacoes com o GStart -h
> >
> > Cheguei as seguintes conclusoes.
> >
> > 1) O DBExpress executa um Commit e nao o CommitRetainig isso pode ser 
> > verificado no TSQLMonitor (
> > isc_commit_transaction).
> >
> > 2) Mais se uma consulta e executada no banco e nao ha nenhum transacao 
> > iniciada e criada uma internamente e esta transacao de leitura fica em 
> > aberto (isc_commit_retaining) ate que o banco seja desconectado.
> >
> > - Nao sei dizer se depois de algum tempo esta transacao e finalizada.
> >
> > - Como esta transacao geralmente e apenas para leitura, nao sei o quanto 
> > ele afeta no desempenho do FB, para os Updates uma transacao e iniciada e 
> > finaliza com Commit ou RollBack, isso e feito automaticamente pelo metodos 
> > PSStartTransaction, PSEndTransaction e PSInTransaction do TSQLDataSet ou 
> > manualmente pelo desenvolvedor.
> >
> > - Pode se evitar que a transacao de leitura fique aberta iniciando uma 
> > transacao para fazer as consultas e depois finalizando a com Commit, tem 
> > tambem a propriedade SQLDataSet1.TransactionLevel, que pode ser utilizada 
> > para indicar qual a transacao a ser utilizada, por padrao e 0 e a ultima 
> > transacao ativa e utilizada.
> >
> > 3) Com algumas mudancas nos componentes do DBExpress ele pode facilmente 
> > trabalhar como o IBX e o MDO com relacao as transacoes (quem sabe no 
> > futuro crio componentes descentes que trabalhem desta forma).
> >
> > Os teste foram feitos:
> >
> > Windows XP Professional SP 2 super atualizado
> >
> > FB 1.5.2 SS com o CollatePT_BR instalado na mesma maquina
> > Conexao=localhost:C:\Arquivos de programas\Firebird\examples\EMPLOYEE.FDB
> >
> > Delphi 6 UP 2 RTL 3
> > Componetes: TSQLConnection, TSQLDataSet, TSQLMonitor, TClientDataSet e 
> > TDataSetProvider
> >
> > LibraryName=dbexpint.dll
> > VendorLib=GDS32.DLL
> >
> > 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