Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
ValerioB Novato

Registrado: Quarta-Feira, 20 de Julho de 2011 Mensagens: 59
|
Enviada: Dom Jul 22, 2012 1:52 pm Assunto: Travar Registro FireBird |
|
|
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 |
|
 |
Luciano_Lopes Colaborador

Registrado: Quarta-Feira, 23 de Abril de 2008 Mensagens: 1080
|
Enviada: Dom Jul 22, 2012 6:18 pm Assunto: |
|
|
Tenta dentro de uma query, acho que vai melhorar |
|
Voltar ao Topo |
|
 |
felipekk Colaborador


Registrado: Quinta-Feira, 5 de Janeiro de 2012 Mensagens: 1531 Localização: Pirapora - MG
|
Enviada: Dom Jul 22, 2012 6:44 pm Assunto: |
|
|
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 |
|
 |
syler Profissional

Registrado: Segunda-Feira, 25 de Fevereiro de 2008 Mensagens: 734 Localização: Apucarana - Norte do Paraná
|
Enviada: Seg Jul 23, 2012 2:02 pm Assunto: Re: Travar Registro FireBird |
|
|
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 |
|
 |
ValerioB Novato

Registrado: Quarta-Feira, 20 de Julho de 2011 Mensagens: 59
|
Enviada: Seg Jul 23, 2012 2:09 pm Assunto: |
|
|
é, não consegui não :/ |
|
Voltar ao Topo |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
|
Voltar ao Topo |
|
 |
ValerioB Novato

Registrado: Quarta-Feira, 20 de Julho de 2011 Mensagens: 59
|
Enviada: Seg Jul 23, 2012 2:30 pm Assunto: |
|
|
syler, sabe dizer como ? |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 24, 2012 7:21 pm Assunto: Re: Travar Registro FireBird |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 24, 2012 7:21 pm Assunto: Re: Travar Registro FireBird |
|
|
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 |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
Enviada: Ter Jul 24, 2012 11:08 pm Assunto: |
|
|
Tai, gostei da função do CDS...demorar....kkkkkkkkkkkkkkkk |
|
Voltar ao Topo |
|
 |
ValerioB Novato

Registrado: Quarta-Feira, 20 de Julho de 2011 Mensagens: 59
|
Enviada: Qua Jul 25, 2012 11:01 am Assunto: |
|
|
Não é o CDS, ja tentei por TQuery, TIBQuery e por ai vai. |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Jul 26, 2012 6:36 pm Assunto: |
|
|
ValerioB escreveu: | Não é o CDS, ja tentei por TQuery, TIBQuery e por ai vai. |
e demorou? |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qui Jul 26, 2012 9:24 pm Assunto: |
|
|
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 |
|
 |
ValerioB Novato

Registrado: Quarta-Feira, 20 de Julho de 2011 Mensagens: 59
|
Enviada: Sex Jul 27, 2012 3:57 pm Assunto: |
|
|
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 |
|
 |
|