[firebase-br] RES: RES: melhor cenário para resolver problemas com transação

Jose Aparecido da Silva - Fasystem listas em fasystem.com.br
Ter Ago 31 11:45:31 -03 2010


Bom dia Fernando
Eu uso o isolamento readcommited também para leitura e controlo as
transações explicitamente, dando um starttransaction e um commit no final.
Inicio a rotina de insert/update assim:

1. Faço telas diferentes para mostrar dados e atualizar
2. Verifico se a transação já está iniciada com: If not
IBTransactionGravar.InTransaction then IBTransactionGravar.StartTransaction;
3. abro a query que sera utilizada para insert/update assim:
qrCadastro.Sql.Clear;
qrCadastro.Sql.Add('select * from TABELA where ID is null');
qrCadastro.Open;
qrCadastro.Append;

4. faço as atualizações
5. Tudo certo: commit 
6. Se falhou alguma coisa: rollback;
7. volto para a tela de visualização e se for preciso dou um refresh na
query para refletir a atualização.

[ ]'s
Jose Aparecido da Silva
Fasystem





-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Fernando Filho
Enviada em: terça-feira, 31 de agosto de 2010 10:12
Para: FireBase
Assunto: Re: [firebase-br]RES: melhor cenário para resolver problemas com
transação

José, legal suas ideias, só me esclarece melhor umas coisas
então você usa 2 ibtransaction correto? um com read commited e o outro com
qual?
nunca usei ibupdatesql, vou dar uma estudada nele..
pelo que entendi com o segundo ibtransaction vc pode dar um try..except com
um start transaction e  commit (no readcommited ele nao deixa)

mesmo ficando no ibx, vai dar um trabalho danado rsrs
mas ja ajudou um bocado :)
abraço!

Em 30 de agosto de 2010 23:30, Jose Aparecido da Silva - Fasystem <
listas em fasystem.com.br> escreveu:

> Vou falar da minha experiencia:
> Uso D7 e FB2.13 e IBX.
> Pelo menos por enquanto não tenho necessidade de trocar.
> Aqui vão algumas dicas que tenho utilizado e tem dado bons resultados.
> Sempre utilizo querys com cachedupdates = true e faço uso do TIBUpdateSql
> para as atualizações.
> Utilizo uma transação com isolamento readcomitted para leitura e outra pra
> gravação e atualização dos dados.
> Para mostrar os dados para o cliente utilizo uma query de consulta ligado
a
> transação de leitura e quando necessito inserir ou modificar uma linha
> utilizo outra query com a transação de gravação.
> Nunca utilizo commitrettaining. Ele é pratico mas com certeza é o motivo
de
> tantos deadlocks. Portanto fuja dele. Só utilize se não houver outro
jeito.
> IBX é rápido e muito prático. É só saber trabalhar com ele.
> Não utilize TTable e traga sempre a menor quantidade possível de dados.
> Capriche nos índices para pesquisa e abuse dos relacionamentos para
> distribuir melhor os seus dados.
> Utilize sempre transação para controlar as atualizações. Faça isso
> inclusive
> para relatórios. Não economize no controle transacional.
> É isso.
> Estou aí para ajudar em alguma coisa
>
> [ ]'s
> Jose Aparecido da Silva
> Fasystem
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Fernando Filho
> Enviada em: segunda-feira, 30 de agosto de 2010 18:46
> Para: FireBase
> Assunto: [firebase-br] melhor cenário para resolver problemas com
transação
>
> Olá pessoal, peço se possível para me ajudar nesse problema (entrando um
> pouco em delphi , espero que não seja muito OFF ^^ )
>
> é o seguinte, tenho um sistema usando componentes da paleta interbase
> (famoso ibx)
> infelizmente hoje vejo que não foi uma boa, pensei numa coisa pequena
(anos
> atras), a empresa cresceu pacas, e hoje essa arquitetura está me dando dor
> de cabeça, alguns modulos do sistema precisam de um controle real de
> transação por questões de segurança e quando tento colocar alguma coisa ,
> começam os lock conlifcts, ai tenho q deixar do jeito q tá, mas ai vira e
> mexe aparece um caixa com 2 lançamentos iguais (algum erro no meio do
> processo e o usuario tenta incluir novamente, como não deu rollback ele
> inclui denovo..), fora o acumulo de transações ativas, acontece algumas
> vezes por semana de o servidor simplesmente estourar a memoria, e eu ter
> que
> restartar o firebird.
>
> resumo basico: uso o transaction como read commited e commit rettaining em
> todo os metodos insert, delete, update do sistema. ok já sei que não é
> ideal
> e estou procurando a melhor maneira pra resolver, por isso peço ajuda aos
> amigos do grupo, levando em conta que o sistema é bem grande então para
> ajeitar isso imagino que vai ser F*&¨%
>
> enfim, meus cadastro simples são com table (outra porcaria). já pensei até
> em trocar a conexão para Dbexpress, mas seria uma manutenção MONSTRO
> perderia uns bons meses nisso, se eu tiver como resolver no ibx melhor,
mas
> se tiver que mudar vo mudar, pois não aguento mais esses problemas.
>
> desculpem o email grande, e agradeço a ajuda desde já :)
>
>
> --
> Atenciosamente
> Fernando Filho
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Atenciosamente
Fernando Filho
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa






Mais detalhes sobre a lista de discussão lista