Usuário travando

Discussão em 'Banco de Dados / Database' iniciado por af.dums, Março 23, 2009.

  1. af.dums

    af.dums Membro Ativo

    Opa, blz?

    Queria fazer um tratamento especifico para o usuário que esta travando o registro da tabela, sei que existem as tabelas hidden que podem me ajudar nisto. Preciso saber o nome do usuário que está me travando e armazena-lo numa variavel, alguem tem alguma idéia de como posso fazer isto?

    Obrigado

    Att,
    Anderson
  2. TrombiniSP

    TrombiniSP Membro Participativo

    Exemplo usando a tabela ITEM. Deste vc pode evoluir para o código desejado:

    Código:
    FIND Item WHERE RECID(Item) = rc-Item EXCLUSIVE-LOCK NO-WAIT NO-ERROR.
     
        IF AVAILABLE Item AND  NOT LOCKED Item THEN DO:
            HIDE MESSAGE NO-PAUSE.
            RETURN "".
        END.
     
        FIND Item WHERE RECID(Item) = rc-Item NO-LOCK NO-ERROR.
     
        FIND FIRST _lock 
             WHERE _lock._lock-recid = INTEGER(RECID(Item)) 
           NO-LOCK NO-ERROR.
     
        IF AVAILABLE _lock THEN 
            FIND FIRST _connect 
                 WHERE _connect._connect-usr = _lock._lock-usr 
               NO-LOCK NO-ERROR.
     
        IF AVAILABLE _lock AND AVAILABLE _connect THEN
            ASSIGN ch-LockMessage = "["                 + CAPS(_lock._lock-name)
                                  + " Em:"              + CAPS(ENTRY(3,_connect._connect-device,"/") + ENTRY(4,_connect._connect-device,"/"))
                                  + "], Usando Item ["  + ch-it-codigo
                                  + "]".
        ELSE
            ASSIGN ch-LockMessage = "Outro Usuario Utilizando Item [" + ch-it-codigo + "]".
     
        HIDE MESSAGE NO-PAUSE.
        HIDE FRAME fr-message NO-PAUSE.
     
        IF ch-LockMessage <> "" THEN
            RETURN ch-LockMessage.
     
        RETURN "".
    
  3. renato.schlogel

    renato.schlogel Membro Participativo

    Estou com um problema de travando, ao fazer um find na tabela _lock, onde o registro não é encontrado, a consulta fica travada por horas.
    De alguma forma, o registro da tabela esta em lock, porem não existe registro na tabela _lock para aquele recid.


    Código:
    FIND FIRST _lock
             WHERE _lock._lock-recid = INTEGER(RECID(Item)) 
           NO-LOCK NO-ERROR.
    Gostaria de saber se alguem sabe se tem como dar um time para o find.

    tipo tentar achar por 2 segundo, caso não ache cancele a consulta.

    Desde já Obrigado.
  4. renato.schlogel

    renato.schlogel Membro Participativo


    Pessoal, achei a seguinte solução par ao meu problema:
    Código:
    repeat.
       find next _lock.
    
       if _lock._lock-recid eq vl-RecidInteiro then do.
          vl-usuario = _lock._lock-name.
          leave.
       end.
    
       if time gt vl-timeMaximo     or
          time lt vl-timeMaximo - 5 then
          leave.
    end.
    

    Vlw Pessoal.
  5. renato.schlogel

    renato.schlogel Membro Participativo

    Faltou a atribuição de 5 (5 segundos) na variável vl-timeMaximo antes do repeat.

Compartilhe esta Página