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

Dica Bugs Zero Hora encontrados

Discussão em 'Progress 4GL' iniciado por rafael.andrade, Julho 29, 2016.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Bom, este tópico é para mostrar os bugs do progress não informados anteriormente.

    Estreando o tópico, tenho 2 erros cabulosos:

    1. Temp-Table com LOOP Infinito:
    ======================================================================
    - Descrição:
    - Ao alterar o valor do campo do índice padrão, o progress se perde e não sai do FOR EACH

    - Código demonstrando:
    Código:
    DEF TEMP-TABLE ttTeste
             FIELD id AS INTEGER
             FIELD nome AS CHAR
             INDEX IDX01 AS UNIQUE id.
    
    CREATE ttTeste.
    ASSIGN ttTeste.id = 1
           ttTeste.nome = "Ambrósio".
    
    CREATE ttTeste.
    ASSIGN ttTeste.id = 2
           ttTeste.nome = "Angliston".
    
    FOR EACH ttTeste.
        MESSAGE ttTeste.id SKIP ttTeste.nome
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
       ASSIGN ttTeste.id = ttTeste.id + ttTeste.id * 2.
    END.
    
    - Solução:
    Código:
    DEF TEMP-TABLE ttTeste
             FIELD id AS INTEGER
             FIELD nome AS CHAR
             INDEX IDX01 AS UNIQUE id.
    
    CREATE ttTeste.
    ASSIGN ttTeste.id = 1
           ttTeste.nome = "Ambrósio".
    
    CREATE ttTeste.
    ASSIGN ttTeste.id = 2
           ttTeste.nome = "Angliston".
    
    FOR EACH ttTeste BY ROWID(ttTeste).
        MESSAGE ttTeste.id SKIP ttTeste.nome
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
       ASSIGN ttTeste.id = ttTeste.id + ttTeste.id * 2.
    END.
    
    ======================================================================
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Ops, agora vai o segundo não consegui simular com temp-table mas é assim:

    2. Erro estranho que desfaz tudo da procedure e continua a execução do código que chamou a procedure.
    ============================================================================================================================================
    Código:
    IF AVAIL MinhaTabela THEN FIND FIRST oper-ord WHERE oper-ord.nr-ord-prod = MinhaTabela.nr-ord-prod NO-LOCK NO-ERROR.
    ELSE FIND FIRST oper-ord WHERE oper-ord.nr-ord-prod = MinhaoOutraTabela.nr-ord-prod NO-LOCK NO-ERROR.
    
    IF oper-ord.op-codigo <> 123 then do: /* Se não colocar AVAIL, desfaz tudo e sai da procedure */
        [...]
    END.
    
    ============================================================================================================================================
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Nesse segundo erro não apareceu a clássica mensagem progress abaixo:

    upload_2016-7-29_17-10-8.png

    Att.

    Rafael
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Meu caro, o segundo erro eu concordo, mas o primeiro, vc está alterando um campo em que o for each está se baseando para listar, é logico que a coisa vai se perder, não é erro do progress, é erro de logica no programa, vc nunca pode "navegar" por um campo e alterar o mesmo.

    Vc usou o rowid() pra resolver, podia usar uma chave secundária.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Mas isso não acontece em dotNet e JAVA
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    A meu ver, o índice deve ordenar na memória e se o campo mudar não deveria ser interpretado como um novo registro na tabela.

Compartilhe esta Página