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

Travando Tabela Multiusuários

Discussão em 'Progress 4GL' iniciado por DFResmer, Setembro 12, 2011.

  1. atila.cm

    atila.cm Membro Participativo

    Complementando o que foi dito anteriormente, prender registros tem a ver com bloco, mas não simplesmente um bloco, e sim uma transação. Se você altera algo na base de dados o bloco se torna uma transação, mesmo que você chame uma procedure ou programa externo.
    Para saber se está em uma transação use o comando abaixo:
    IF TRANSACTION THEN message "É Transação." view-as alert-box.
    Experimente colocar a mensagem antes do FOR EACH para saber se já não está dentro de uma transação.
    Você pode restringir a transação para o laço do FOR EACH usando-o conforme abaixo:
    FOR EACH arquivo WHERE qualquer coisa EXCLUSIVE-LOCK TRANSACTION:
    Já vi casos onde o bloco do programa chamador era uma transação, o usuário entrava no programa passava o dia fazendo alterações acontecia algum erro e ele perdia tudo. Às vezes o problema não está no seu programa.
    Boa sorte.

    Abraços

    Atila.cm
  2. DFResmer

    DFResmer Membro Participativo

    Descobri onde estava o problema, no menu principal, o usuário tem que degitar usuário e senha, e eu crio uma tabela de log, para saber quantos acessos cada usuário fez, dia e hora... para fazer um teste eu inibi esta criação de log no menu inicial e compilei, deu certo, não travou nenhum ves, coloquei na abertura do programa a dica que vc me passou para ver se tem transação, ela apareceia na entrada do programa, depois que bloquei para criar o log no menu inicial, a mensagem já não apareceu e também não travou...

    Eu dou um create direto no menu principal, deve ser esses o problema, de uma olhada abaixo.

    Código:
     
       CREATE LOG.
        ASSIGN LOG.nomusu = INPUT FRAME fr-001 fi-nomusu
               LOG.dtaent = TODAY
               LOG.horent = STRING(TIME, 'HH:MM')
               LOG.horent_INT = TIME.
    
      FIND CURRENT LOG NO-LOCK NO-ERROR.
    
      fi-message:screen-value = ''.
      usuario:hidden = YES.
      RUN "C:\CLINIPRESS\EXEC\Magenda.R".
    
  3. DFResmer

    DFResmer Membro Participativo

    Tem como depois de alterar ou criar sair da transação?
  4. atila.cm

    atila.cm Membro Participativo

    Experimente colocar a criação do LOG em um bloco, depencdendo de como está o seu programa pode dar certo.

    DO TRANSACTION:
    CREATE LOG.
    ASSIGN LOG.nomusu = INPUT FRAME fr-001 fi-nomusu
    LOG.dtaent = TODAY
    LOG.horent = STRING(TIME, 'HH:MM')
    LOG.horent_INT = TIME.

    FIND CURRENT LOG NO-LOCK NO-ERROR.
    END.

    fi-message:screen-value = ''.
    usuario:hidden = YES.
    RUN "C:\CLINIPRESS\EXEC\Magenda.R".

    Abraços

    Atila.cm
  5. DFResmer

    DFResmer Membro Participativo

    Eu coloquei ele dentro de uma procedure e deu certo também, acho que conseguimos resolver.... Obrigado pela ajuda, me ajudou a entender melhor como funciona este processo em blocos.

    Att,

    Diogo

Compartilhe esta Página