Fórum ApplyUpdates com registro em uso #466915
14/01/2014
0
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
Curtir tópico
+ 0Posts
15/01/2014
Daniel Capelari
Gostei + 0
15/01/2014
Marco Salles
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
Gostei + 0
16/01/2014
Daniel Capelari
Será que não tem como configurar um tempo pra esse apply esperar?
Gostei + 0
16/01/2014
Daniel Capelari
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.
Gostei + 0
16/01/2014
Marco Salles
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
Gostei + 0
20/01/2014
Daniel Capelari
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)