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 FOR EACH falhando dentro de UPC na bodi159com

Discussão em 'Progress 4GL' iniciado por lucasiam, Julho 19, 2018.

  1. lucasiam

    lucasiam Membro Participativo

    Apesar de ter dado certo, com o DO TRANSACTION o compilador está me alertando:
    ADVERTENCIA -- TRANSACTION para um bloco que ja' e' transacao. (214)
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    é porque vc deve estar criando algum registro ou fazendo EXCLUSIVE-LOCK fora da transação
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    na verdade quando vc movimenta os registros, o progress se força a limpar o buffer pra proxima leitura, dai atualiza a base, mas carrega o BI e AI, pra fazer undo se for preciso.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Quando tem uma transação dentro de outra dá essa mensagem, eu tenho disso aqui, mas não tem como, as vezes tem que conviver com isso.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Não é muito bem isso não.

    Quando se faz alguma interação com o banco de dados de escrita ou até mesmo um lock de registro, o bloco inteiro se transforma numa transação.

    tipo:
    Código:
    DO:
    
      CREATE MinhaTabela.
      ASSIGN MinhaTabela.Codigo = 1.
    
      TMaior:
      DO TRANS:
             RUN API.p.
      END.
    
    END.
    
    ou ainda:

    Código:
    DO:
    
      FIND FIRST MinhaTabela EXCLUSIVE-LOCK NO-ERROR.
    
      TMaior:
      DO TRANS:
             RUN API.p.
      END.
    
    END.
    
    Ambos vão dar warning de transação já aberta.

    O correto é só fazer LOCK de registro, criação e alteração dentro do DO TRANS, fora dele só NO-LOCK, e nunca usar shared-lock (quando se coloca isso na query ou não coloca nada de LOCK, pois é usado de modo implícito como no FIND FIRST MinhaTabela NO-ERROR).
    lucasiam curtiu isso.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Lembrando que o DO END mostrados no código podem ser de um evento CHOOSE um botão, mas o mesmo vale procedures, funções e tudo mais.

Compartilhe esta Página