Duvida For each x Query

Discussão em 'Progress 4GL' iniciado por ds201, Julho 14, 2015.

  1. jeffyssantos

    jeffyssantos Membro Participativo

    Olá bom dia!
    Amigos gostaria de humildemente colaborar....
    Creio que para a necessidade na query você pode limitar com o comando 'max-rows ' .
    Mais ou menos dessa forma:
    hQuery:query-prepare("for each item max-rows 5:").

    Espero que ajude!

    Abraço.

    Sds,
    Jefferson
  2. ds201

    ds201 Membro Participativo

    Realmente a melhor solução é esta.

    Com a temp-table funcionou bem.
    Obrigado.
  3. ds201

    ds201 Membro Participativo

    Bom dia Jefferson

    Olhando minhas anotações encontrei:

    O parâmetro “MAX-ROWS num-results” somente funciona para scrolling queries.
    Specifies the maximum number of records to be returned by the query. Any other records satisfying the query are ignored and no error is raised.
    The limit is imposed before any sorting occurs; Progress retrieves records up to the number specified and then sorts those records.
    This option is valid for scrolling queries only.
    You can use it to prevent a long delay that might occur if a query returns many more records than you expect.

    Na próxima vez vou usar a opção "max-rows".
    Obrigado pelo post.

    Sds
  4. ds201

    ds201 Membro Participativo

    Boa tarde Rafael

    Uma nota apenas:
    Quando usamos "for each" é possível limitar as leituras sem usar "leave".
    Olhe o exemplo abaixo:

    Código:
    def var i-qtd as int   no-undo.
    
    for each Bem
       no-lock
       i-qtd = 1 to 5:
    
       display
          Bem.bm-codigo
          Bem.bm-indice
          Bem.descricao.
    
    end.
    
    No fim do "for each" temos " i-qtd = 1 to 5" que limita a leitura a 5 registros.
    Foi este "pedacinho" que não consegui fazer funcionar na query.

    Obrigado
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Isso eu entendi claramente desde o princípio, mas o que vc não conseguiu entender é porque usar temp-table.

    Vou exemplificar de modo completo.

    Código:
    DEF TEMP-TABLE ttItens LIKE item
                         FIELD fRowID as ROWID.
    
    DEF VAR i-qtd AS INTEGER NO-UNDO.
    
    FOR EACH item NO-LOCK i-qtd = 1 to 5:
         CREATE ttItens.
         BUFFER-COPY item TO ttItens.
         ASSIGN ttItens.fRowID = ROWID(item).
    END.
    
    /* Isso fará com que, ao clicar em qualquer registro, ele traga para memória o registro temporário e o registro original ao mesmo tempo */
    OPEN QUERY BRW-Itens FOR EACH ttItens NO-LOCK, FIRST item NO-LOCK WHERE ROWID(item) = ttItens.fRowID INDEXED-REPOSITION.
    
    ou

    Código:
    DEF TEMP-TABLE ttItens LIKE item.
    
    DEF VAR i-qtd AS INTEGER NO-UNDO.
    
    FOR EACH item NO-LOCK i-qtd = 1 to 5:
         CREATE ttItens.
         BUFFER-COPY item TO ttItens.
    END.
    
    /* Isso fará com que, ao clicar em qualquer registro, ele traga para memória somente o registro temporário */
    OPEN QUERY BRW-Itens FOR EACH ttItens NO-LOCK INDEXED-REPOSITION.
    
    Pronto

    Acho que agora não restará mais dúvidas.

    Atenciosamente

    Rafael
  6. ds201

    ds201 Membro Participativo

    Obrigado Rafael.
    Valeu.

Compartilhe esta Página