Olá a todos.. seguinte, estou com um problema quando faço um exclusive-lock em uma tabela.. o caso é: quando faço um exclusive-lock, o registro nao fica mais "avail" quando outro usr tenta executar o mesmo programa, porém os "usuarios" nao entende que o numero de lock é um usuário. Entao gostaria de saber se tem como fazer um find e identificar o nome do usuário, ou o numero do lock (pts em linux) para mostrar uma mensagem e ele realmente entender a situacao, e nao mais a mensagem padrao do banco com o numero do lock. Obrigado! []'s Marcos Possamai
Caro Marcos: O ideal é você tratar a mensagem enviando uma mensagem para o usuário que não consegue acessar o registro. Normalmente é necessário ajustar a lógica do programa. Aqui vai um exemplo de como costumo fazer. Código: . . . blk-bloco: DO ON ENDKEY UNDO blk-bloco, LEAVE blk-bloco ON ERROR UNDO blk-bloco, RETRY blk-bloco: . . . . FIND banco.tabela WHERE xxxx EXCLUSIVE-LOCK NO-WAIT NO-ERROR. IF LOCKED banco.tabela THEN DO: MESSAGE "Registro sendo utilizado por outro usuario, tentar outra vez ?" VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE "" UPDATE choice AS LOGICAL. IF choice = YES THEN DO: UNDO blk-bloco, RETRY blk-bloco. END. ELSE DO: UNDO blk-bloco, LEAVE blk-bloco. END. END. /* IF LOCKED */ ELSE DO: IF NOT AVAILABLE banco.tabela THEN DO: . . . . LEAVE blk-bloco. END. /* IF NOT AVAILABLE */ END. /* else IF LOCKED */ . . . . . END. /* blk-bloco */ . . . Abraços __________________________ Attiware Informática Ltda. Atila C. Mizerkówski atila.cm@hotmail.com
Olá Atila... seguinte, este tipo de validação já ocorre sem problemas, porém o que quero tratar é além de mostrar uma mensagem correta para o usuário do que está acontecendo, informar qual o lock da tabela para que assim, possamos identificar e se o tempo for maior que alguns minutos, matamos este processo na mão (kill -9 xxxxx). acho que agora consegui completar a explicação de antes.