1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida lock de registro

Discussão em 'Progress 4GL' iniciado por Eilleen, Dezembro 18, 2014.

  1. Eilleen

    Eilleen Membro Ativo

    Boa tarde, pessoal!

    Eu costumo tratar casos de lock de registro, como até já postei em alguns tópicos, mas agora estou com uma dúvida e não encontrei nada no help do Progress...

    Existe alguma forma de eu saber via comando quem é o usuário que está prendendo o registro?

    Trocando em miúdos... quando não incluímos nenhum tratamento, o Progress mostra a mensagem padrão "Registro x em uso por <nome-da-estacao>.. mas eu uso tratamento com IF LOCKED e mostro uma mensagem tratada, pois na mensagem padrão se vc cancelar o processo, a sessão do Progress é reiniciada, além de não ser uma mensagem nada amigável. Porém agora surgiu a necessidade de incluir na mensagem tratada qual é o usuário (ou pelo menos a estação) que está com o registro alocado.

    Alguém sabe como fazer isso?
  2. fabiano

    fabiano Consultor Banco de Dados Moderador Equipe de Suporte

    Boa tarde!

    É possível visualizar o usuário que está em lock através do "promon" na opção 4.
    Eilleen curtiu isso.
  3. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    reissobr, Agnaldo e Eilleen curtiram isso.
  4. Eilleen

    Eilleen Membro Ativo

    Boa tarde, Fabiano!
    Agradeço a atenção... No servidor tudo bem, eu queria saber a nível de programa mesmo... ;)
  5. Eilleen

    Eilleen Membro Ativo

    Olá Cleilton, era isso mesmo que eu precisava.
    Estava vendo o arquivo que me indicou e um colega me avisou de uma include que já tínhamos implementada aqui pra isso..

    Segue (com algumas alterações) caso seja útil pra mais alguém:

    Código:
    REPEAT:
        FIND <nome-tabela> WHERE RECID(<nome-tabela>) = <variavel-RECID> EXCLUSIVE NO-ERROR NO-WAIT.
        IF LOCKED <nome-tabela> THEN DO:
            FIND FIRST <nome-banco>._lock WHERE <nome-banco>._lock._lock-recid = INTEGER(<variavel-RECID>) NO-LOCK NO-ERROR.
            FIND FIRST <nome-banco>._connect WHERE <nome-banco>._connect._connect-usr = <nome-banco>._lock._lock-usr NO-LOCK NO-ERROR.
            FIND LAST du_conexoes WHERE du_conexoes.estacao = <nome-banco>._connect._connect-device NO-LOCK NO-ERROR.
            ASSIGN lock_usr_ = <nome-banco>._connect._connect-usr NO-ERROR.
            ASSIGN lock_dev_ = <nome-banco>._connect._connect-device NO-ERROR.
            MESSAGE 'O registro solicitado está em uso por ' lock_nom_ ' em' lock_dev_ '.' SKIP
                    'Deseja tentar novamente?' VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE 'Lock' UPDATE lock_sai_.
            IF NOT lock_sai_ THEN DO:
                lock_ok_ = FALSE.
                LEAVE.
            END.
        END.
        ELSE DO:
            lock_ok_ = TRUE.
            LEAVE.
        END.
    END.
  6. baltazar

    baltazar Membro Participativo

    Outra maneira

    Código:
    for each {&DB}._Connect no-lock.
    
        if {&DB}._Connect._Connect-Usr = ? then next.
    
        /**/
       
        for each {&DB}._Lock no-lock.
    
            if {&DB}._Lock._Lock-Usr = ? then leave.
            if {&DB}._Lock._Lock-Usr <> {&DB}._Connect._Connect-Usr then next.
           
            /**/
    
            find    {&DB}._File  where
                    {&DB}._File._File-Number = {&DB}._Lock._Lock-Table
                    no-lock no-error.
    
            if available({&DB}._File) then x-nomeTabela = {&DB}._File._File-Name.
                                      else x-nomeTabela = "ERRO: Sem Tabela!".
    
            /**/
           
            if x-nomeTabela = i-tabela then do:
    
                o-msg_simples = "Em Uso por " + caps({&DB}._Connect._Connect-Name) + " com o N£mero " + string({&DB}._Connect._Connect-Usr).
    
                /**/
    
                o-msg_completa = "Tabela " + i-tabela + " em uso por " + {&DB}._Connect._Connect-Name + " (" +  string({&DB}._Connect._Connect-Usr) + ")" +
                                 " no " +  {&DB}._Connect._Connect-Device + "!".
            end.
    
        end. /* FOR EACH _lock */
    end. /* FOR EACH _connect */
    
    don.junior, reissobr e pizzaia curtiram isso.

Compartilhe esta Página