Fórum ApplyUpdates com registro em uso #466915

14/01/2014

0

Caros,

Eu sei de todo problema de deixar transações em aberto por muito tempo, registros travados sendo editados, etc... Mas acontece que tenho um sistema que já está travando registro na edição. Estou refazendo os processos todos com TClientDataSet, DBExpress, etc, justamente por esse motivo. Só que a empresa não para. Metade do sistema ainda usa IBO travando registro e outra metade caminha para 3 camadas.

Agora a dúvida:

Em uma tela já refeita, tudo conforme as regras das 3 camadas, quando dou um ApplyUpdates em um registro que está travado eu não obtenho nenhum retorno de erro... O sistema fica travado esperando o registro ser atualizado...

Exemplo: Alguém altera o registro de um produto em uma tela que está feita com IBO e trava registro. Outro alguém tenta baixar o estoque desse produto na tela de pedidos que está feita em 3 camadas. Eu preciso de algum erro na tela de pedidos avisando que não funcionou. É só um exemplo, mas é essa ideia.

Uso FB 1.5, Delphi 7 e não tenho hipóteses de alterar nada desses 2. Como já disse, o sistema está na ativa e estou alterando no esquema Hot Swap... Refazer o sistema todo pra depois atualizar não está em questão.
Daniel Capelari

Daniel Capelari

Responder

Posts

15/01/2014

Daniel Capelari

up!!
Responder

Gostei + 0

15/01/2014

Marco Salles

Comece com as configurações do Provider Flags

Vc programou o evento onEreconcilleErro do ClietnTadaSet ???

Tb tem o evento OnUpdateError do DataSetProvider


é so umas idéias .. Acredito que com este pontapé vc possa começar a destrinchar e chegar a algo mais específico

[]sds
Responder

Gostei + 0

16/01/2014

Daniel Capelari

Já configurei sim... o programa fica parado no ApplyUpdates esperando o registro ser desbloqueado... Qd o registro é desbloqueado na outra estação o ApplyUpdates passa e funciona...

Será que não tem como configurar um tempo pra esse apply esperar?
Responder

Gostei + 0

16/01/2014

Daniel Capelari

Problema resolvido.

No componente TSQLConnection em Params existe a opção "WaitOnLocks". Se estiver setada como TRUE os ApplyUpdates esperam sua vez para gravar. Se estiver FALSE os ApplyUpdates voltam um erro qd algum registro está "lockado" e não gravam.
Responder

Gostei + 0

16/01/2014

Marco Salles

Problema resolvido.

No componente TSQLConnection em Params existe a opção "WaitOnLocks". Se estiver setada como TRUE os ApplyUpdates esperam sua vez para gravar. Se estiver FALSE os ApplyUpdates voltam um erro qd algum registro está "lockado" e não gravam.


Engraçado , mas este é o Padrão ...O Padrão é retornar um Erro quando for configuração Pessimista ... Agora eu prefiro que o registro possa ser editado desde que faça em campos
diferentes .. O Provider resolve isto limitando a instrução sql a ser pocessada ao escolher a opção upWhereKeyOnly e configurando os Flags corretamente

Se vc utilizar upWhereAll sempre retornou um erro pelo menos para mim quando dou um applyUpdates em um registro ja alterado por outro usúario

Quando upWhereKeyOnly fico livre para edição desde que configurado corretamente os ProvirsFlags

So uma curiosidade , como esta o Valor doUPADATEMODEdo Provider e como esta configurado os ProviderFlags no DataSet ???

[]sds
Responder

Gostei + 0

20/01/2014

Daniel Capelari

Está KeyOnly e os campos estão só com update... só o codigo está key, update e where... Mas isso está funcionando perfeitamente...

O problema é outro. Eu JÁ TENHO telas antigas feitas com IBO e estão travando de forma pessimista... E o TClientdataset ficava aguardando o IBO "soltar" o registro. Quando soltava o Apply funcionava. Mesmo que demorasse 15 minutos.

O sistema está sendo refeito e um dia não haverá IBO... Mas de qualquer forma obrigado. Deu tudo certo.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar