ApplyUpdates com registro em uso
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.
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
Curtidas 0
Respostas
Daniel Capelari
14/01/2014
up!!
GOSTEI 0
Marco Salles
14/01/2014
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
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
Daniel Capelari
14/01/2014
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?
Será que não tem como configurar um tempo pra esse apply esperar?
GOSTEI 0
Daniel Capelari
14/01/2014
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.
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
Marco Salles
14/01/2014
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.
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
Daniel Capelari
14/01/2014
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.
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