[firebase-br] RES: Lock conflict on no wait transaction + IBO

Jéter Rabelo - GMail jeter.rabelo em gmail.com
Qua Ago 21 07:46:41 -03 2013


Felipe, bom dia.

Faça o seguinte:

Na consulta (select)
StartTransaction;
Select ...
RollBack ou Commit;

Na gravação:
Starttransaction;
insert or update...
Commit ou Rollback

Fazendo dessa forma, dificilmente você terá um lock conflict.

Atenciosamente.

Em 20/08/2013 10:45, Felipe Aron escreveu:
> Felix eu utilizo o modo "off-line". Sempre carrego as informações e utilizo
> o banco somente na gravação.
>
> O problema no meu cenário foi:
>
> Maquina01 - Abriu o cadastro do produto em modo "offline"
>
> Maquina02 - Abriu a tela de inclusão de pedido (também offline) e
> selecionou o produto que esta sendo alterado. Nesse momento apenas fez o
> "Select" e jogou o produto na Grid (offline).
>
> É bem provável que esse "Select" não tenha fechado a transação. Ao dar um
> "Close()" na IBOQuery é dado um Roollback automático?
>
>
>
> Em 20 de agosto de 2013 10:30, Felix - SOL Informática <
> felix em solsistemas.com> escreveu:
>
>> Sugiro que separe em tabelas distintas as informações "fisicas" do cadastro
>> (nome, endereco, telefone) e as "dinamicas" (ultima compra, total em
>> debito,
>> quantidade de itens comprados)
>>
>> Ao abrir a ficha para edicao, o usuario tem acesso somente as "fisicas"; as
>> "dinamicas" nao devem ser alteradas (nao manter esta transacao aberta),
>> logo
>> não haverá conflito quando outro operador lançar um pedido.
>>
>> MAS se operadores diferentes abrirem o mesmo cadastro para edição voce tera
>> conflito. Eu faço a edição em modo "off line" - carrego os campos e encerro
>> a transacao de leitura; o outro usuario irá carregar dessa mesma maneira.
>> Aquele que tentar salvar por ultimo recebe uma mensagem de alerta sobre os
>> dados terem sido atualizados e que sua edição não tem mais validade.
>>
>> Francisco Felix
>> www.solsistemas.com
>>
>>
>> -----Mensagem original-----
>> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Felipe Aron
>> Enviada em: terça-feira, 20 de agosto de 2013 09:53
>> Para: FireBase
>> Assunto: [firebase-br] Lock conflict on no wait transaction + IBO
>>
>> E ai pessoALL tudo bem?
>>
>> Hoje pude acompanhar em tempo real o problema do Firebird "*Lock conflict
>> on no wait transaction*":
>>
>> http://www.firebirdfaq.org/faq109/
>>
>> O cliente teve esse erro ao alterar o cadastro do produto, e constatei que
>> numa outra máquina estava fazendo um novo pedido selecionando o mesmo
>> registro.
>>
>> O Select (leitura) possui uma transação enquanto o Update (gravação) possui
>> outra.
>>
>> Entendi a questão do NO WAIT (leitura da FAQ) porém não vejo com bons olhos
>> habilitar o WAIT pois no meu cenário pode "travar" a ação do usuário - no
>> caso a alteração do produto.
>>
>> Estou usando os componentes IBO (Database, Transaction, Query).
>>
>> Qual seria a forma ideal para tratar essa exceção?
>>
>> Deixando a Transaction de leitura como "readOnly" resolveria? Existe alguma
>> configuração na Query de somente-leitura (usado somente para Selects) para
>> não deixar a transação pendente?
>>
>> Desde já agradeço pela ajuda! :D
>>
>> --
>> Analista-Programador
>> #FollowMe: @felipearon <http://twitter.com/felipearon> (
>> http://felipearon.net)
>> ______________________________________________
>> 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
>>
>
>





Mais detalhes sobre a lista de discussão lista