[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