ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Travar Registro FireBird

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
ValerioB
Novato
Novato


Registrado: Quarta-Feira, 20 de Julho de 2011
Mensagens: 59

MensagemEnviada: Dom Jul 22, 2012 1:52 pm    Assunto: Travar Registro FireBird Responder com Citação

Boa tarde galera estou usando o seguinte select para travar registro no firebird.

Código:

SELECT * FROM cliente WHERE codCliente = 1 WITH LOCK;


Quando o registro esta travado, pelo IbExpert funciona de forma rapida, porém quando uso no delphi via ClientDataSet ele demora muito. Alguem pode me ajudar ? Obrigado[/code]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Luciano_Lopes
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Abril de 2008
Mensagens: 1080

MensagemEnviada: Dom Jul 22, 2012 6:18 pm    Assunto: Responder com Citação

Tenta dentro de uma query, acho que vai melhorar
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
felipekk
Colaborador
Colaborador


Registrado: Quinta-Feira, 5 de Janeiro de 2012
Mensagens: 1531
Localização: Pirapora - MG

MensagemEnviada: Dom Jul 22, 2012 6:44 pm    Assunto: Responder com Citação

Concordo com o Luciano,
faz o teste ai e nos dê o resultado.
Abraços.
_________________
"Esteja ligado em melhora contínua: hoje melhor do que ontem e pior do que amanhã."


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
syler
Profissional
Profissional


Registrado: Segunda-Feira, 25 de Fevereiro de 2008
Mensagens: 734
Localização: Apucarana - Norte do Paraná

MensagemEnviada: Seg Jul 23, 2012 2:02 pm    Assunto: Re: Travar Registro FireBird Responder com Citação

Isso não funciona no Firebird. Já tentei e não resolve nada. NO IBO funciona mais tem que fazer do jeito certo. Eu ainda não consegui fazer, mais numa empresa que trabalhei usava o esquema.
_________________
Alex Sandro de Oliveira
Analista Programador Delphi
Freelancer
Estudante de Desenvolvimento Web, Marketing Digital e Designer Gráfico na Udemy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
ValerioB
Novato
Novato


Registrado: Quarta-Feira, 20 de Julho de 2011
Mensagens: 59

MensagemEnviada: Seg Jul 23, 2012 2:09 pm    Assunto: Responder com Citação

é, não consegui não :/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ghost_Rider
Colaborador
Colaborador


Registrado: Segunda-Feira, 6 de Outubro de 2003
Mensagens: 4437

MensagemEnviada: Seg Jul 23, 2012 2:25 pm    Assunto: Responder com Citação

Da uma lida nessa artigo...

http://www.comunidade-firebird.org/cflp/downloads/CFLP_T032.PDF
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ValerioB
Novato
Novato


Registrado: Quarta-Feira, 20 de Julho de 2011
Mensagens: 59

MensagemEnviada: Seg Jul 23, 2012 2:30 pm    Assunto: Responder com Citação

syler, sabe dizer como ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 24, 2012 7:21 pm    Assunto: Re: Travar Registro FireBird Responder com Citação

syler escreveu:
Isso não funciona no Firebird. Já tentei e não resolve nada. NO IBO funciona mais tem que fazer do jeito certo. Eu ainda não consegui fazer, mais numa empresa que trabalhei usava o esquema.


como assim?

funciona no IBO e não funciona Firebird?

IBO é o q?
conecta com o q?
com oracle?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 24, 2012 7:21 pm    Assunto: Re: Travar Registro FireBird Responder com Citação

ValerioB escreveu:
Boa tarde galera estou usando o seguinte select para travar registro no firebird.

Código:

SELECT * FROM cliente WHERE codCliente = 1 WITH LOCK;


Quando o registro esta travado, pelo IbExpert funciona de forma rapida, porém quando uso no delphi via ClientDataSet ele demora muito. Alguem pode me ajudar ? Obrigado[/code]


o problema é o CDS?
serve pra q? pra demorar! então, ta certo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ghost_Rider
Colaborador
Colaborador


Registrado: Segunda-Feira, 6 de Outubro de 2003
Mensagens: 4437

MensagemEnviada: Ter Jul 24, 2012 11:08 pm    Assunto: Responder com Citação

Tai, gostei da função do CDS...demorar....kkkkkkkkkkkkkkkk
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ValerioB
Novato
Novato


Registrado: Quarta-Feira, 20 de Julho de 2011
Mensagens: 59

MensagemEnviada: Qua Jul 25, 2012 11:01 am    Assunto: Responder com Citação

Não é o CDS, ja tentei por TQuery, TIBQuery e por ai vai.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Jul 26, 2012 6:36 pm    Assunto: Responder com Citação

ValerioB escreveu:
Não é o CDS, ja tentei por TQuery, TIBQuery e por ai vai.


e demorou?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Jul 26, 2012 9:24 pm    Assunto: Responder com Citação

Amigo qual a necessidade de travar o registro?
vc fazendo isto diminui drasticamente a performance de sua aplicação.
Não entendi a sua necessidade de travá-lo.

Bem amigo o problema de não dar certo está no livro de helen borrie, como descrito a seguir:

Citação:

The WITH LOCK Sub-clause
Firebird 1.5 introduced an optional WITH LOCK extension, for use with or without
the FOR UPDATE clause syntax, to support a restricted level of explicit, row-level pessimistic locking. Pessimistic locking is antithetical to the transaction architecture of
Firebird and introduces complexity. Its use is recommended only by developers with an advanced understanding of how multi-user concurrency is implemented in Firebird. Pessimistic locking is discussed in Chapter 27.


Bem o que está escrito acima é que a cláusula with lock somente pode ser usada num select para atualização de dados mas que seu uso é recomendado para quem tem conhecimento do funcionamento interno do firebird, pois seu uso pode trazer mais mal do que bem.

eis um uso:

Código:

SELECT * FROM ATABLE
FOR UPDATE WITH LOCK;



Citação:
About “Double-Dipped” Updates
It’s not recommended to update the same row more than once in a single trans-
action, because it will interfere with the integrity of both automatic (referential
integrity) and custom triggers. Where savepoints are involved, it causes record
versions to proliferate. This “double-dipping” generally reflects careless applica-
tion design logic. However, a “two-update update” is exactly the intent of the
“dummy update” technique. As long as the use of savepoints is avoided in these
transactions and triggers are carefully conditioned to test for actual changes, it
can be rendered harmless.
Explicit Locking in v.1.5 and Later
The syntax pattern for explicit locks is
SELECT output-specification FROM table-name
[WHERE search-condition]
[FOR UPDATE [OF col1 [, col2 [,...]]]]
WITH LOCK;


O que está escrito acima:
Sobre atualizações duplas
Não é recomendado atualizar a mesma linha mais de uma vez em uma única transação, pq isto interferirá com a integridade tanto do gatilho (TRIGGER) automático (integridade referencial) quanto do personalizado...


O assunto é mais complicado que isto e envolve muitos problemas que pode dar errados, sugiro a leitura do livro dominando o firebird que esclarece muitos destes pontos.



No seu caso a cláusula FOR UPDATE pode ser omitida, mas sempre se utiliza a primary key, não sei qual chave vc está utilizando, não posso afirmar.



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
ValerioB
Novato
Novato


Registrado: Quarta-Feira, 20 de Julho de 2011
Mensagens: 59

MensagemEnviada: Sex Jul 27, 2012 3:57 pm    Assunto: Responder com Citação

entao jhony minha intenção é que na hora que tou o select para pegar um registro da tabela clientes por exemplo, ele trave para que outro usuário não faça isso. Vou tentar usar com FOR UPDATE.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB