[firebase-br] RES: Transação com Select ?

Eduardo Jedliczka edujed em gmail.com
Sex Fev 15 16:50:05 -03 2008


Se você já teve um pouquinho de curiosidade sobre o funcionamento dos
componentes DATASET (ou já tentou fazer componentes para o delphi) verá
que muitos (Zeos, IBX, MDO, IBO - só para citar os que eu já utilizei)
tem uma comparação no query.open que verifica se a query foi previamente
preparada ou não... se não tiver sido, ele prepara a mesma
automaticamente (à exemplo do que acontece com a transação)

Só que no close ele não faz isto!!! vou dar um exemplo beeem genérico em
pascal, não pensando em nenhum componente em especifico...

connection.open;
query.sql.clear;
query.sql.add('select * from clientes');
transaction.open; -- subentendido no query.open caso não tenha sido
explicitada
query.prepare; -- subentendido no query.open caso não tenha sido
explicitada
query.open;
while not query.eof do
  query.next; -- fetch dos dados;
query.close;
query.unprepare; -- muitos não fazem isto
transaction.commit; -- pior do que o caso de cima
connection.close;

agora vejam este outro exemplo, com parâmetros....

connection.open;
query.sql.clear;
query.sql.add('select first 1 ID,FANTASIA from clientes where ID=:ID');
transaction.open; -- subentendido no query.open ou na passagem de
parametro para o server caso não tenha sido explicitada
query.prepare; -- subentendido no query.open  ou na passagem de
parametro para o server caso não tenha sido explicitada
query.parambyname('ID').asinteger = 10; -- dispara um prepare se não
tiver sido explicitado anteriormente...
query.open;
-- rotina
query.close;

query.parambyname('ID').asinteger = 20; - a query já está preparada e
com plan resolvido no server
query.open;
-- rotina
query.close;
query.unprepare; -- finalmente libera a query lá no server.
transaction.commit;
connection.close;

Espero que tenha sido claro...

Eduardo Jedliczka

Em Sex, 2008-02-15 às 15:30 -0300, Felipe Aron escreveu:
> Entendi... só ainda não consigo entender corretamente o PREPARE e
> UNPREPARE.... tem como vc dizer de forma simples como é o funcionamento
> deles ? Por exemplo numa SELECT ?
> 
> 2008/2/15 Davi Eduardo Borges Wall <davi.wall em mult.com.br>:
> 
> > Cuidado não vá bater ou perder o avião respondendo pra lista. Risos..
> >
> > -----Mensagem original-----
> > De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> > Em nome de Eduardo Jedliczka - TeamFB
> > Enviada em: sexta-feira, 15 de fevereiro de 2008 15:53
> > Para: FireBase
> > Assunto: Re: [firebase-br] Transação com Select ?
> >
> > Esta regra vale para todos os componentes que eu conheço que trabalham
> > com firebird.
> >
> > um query.close NÃO fecha a transação. ele fecha o resultset mas mantem a
> > transação em aberto e a query preparada (para ganhar tempo caso seja
> > alterado algum parâmetro e a query seja reaberta)
> >
> > deve-se sempre utilizar um query.umprepare após o query.close, para que
> > a mesma realmente seja despreparada no servidor (e a transação do IBO
> > seja encerrada)
> >
> > há alguns exemplos na WEB de como monitorar os status das transações
> > (sejam elas explícitas, ou gerenciadas pelo próprio IBO) que podem
> > validar estas informações - No momento estou sem condições de apresentar
> > estes exemplos (eu estou em trânsito).
> > e é uma pena que outros componentes não implementem este recurso, snif,
> > snif...
> >
> > Sucesso,
> > Eduardo Jedliczka
> >
> > Em Sex, 2008-02-15 às 14:30 -0300, Felipe Aron escreveu:
> > > Interessante.
> > > Eu uso o IBO para a conexão com o FB. Preciso ativar alguma propriedade
> > na
> > > Query para ela fechar a transação, ou quando dou um CLOSE na query a
> > > transação se fecha ?? Qual o melhor método para fechar a transação
> > usando o
> > > IBOQuery ?
> > >
> > > 2008/2/15 Carlos H. Cantu (TeamFB) <listas em warmboot.com.br>:
> > >
> > > > EJ> Resumidamente e em linguagem não-técnica o FB trabalha com
> > > > EJ> identificadores de transação, onde registros não-commitados são
> > > > visíveis
> > > > EJ> apenas à transação com o mesmo número identificador, e transações
> > > > EJ> comitadas só são visíveis às transações com indicadores iguais ou
> > > > EJ> superiores à esta (em resumo, só são visiveis à transações que
> > foram
> > > > EJ> iniciadas após o commit ter ocorrido).
> > > >
> > > > Na verdade tem um erro na sua afirmação. Não é o ID que determina o
> > > > que pode ser visto, e sim o isolamento:
> > > >
> > > > Uma transação com ID inferior pode enxergar dados que foram
> > > > manipulados (aka: inseridos, alterados, etc) por transações com maior
> > > > ID, desde que o isolamento da primeira seja ReadCommited e a segunda
> > > > já tenha sido commitada.
> > > >
> > > > Da mesma forma, transações com ID superior e isolamento diferente de
> > > > ReadCommited não vão enxergar os registros manipulados pela de ID
> > > > menor.
> > > >
> > > > []s
> > > > Cantu (Membro do TeamFB - FireBase)
> > > > http://www.warmboot.com.br
> > > > FireBase - http://www.FireBase.com.br
> > > >
> > > >
> > > >
> > > > ______________________________________________
> > > > 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
> >
> > ______________________________________________
> > 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
> >
> 
> 
> 
> -- 
> Com a força aprenda a suavidade. Através da suavidade a força prevalecerá!
> ______________________________________________
> 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