Retornar somente uma qde de registros (paginacao)

Discussão em 'Progress 4GL' iniciado por joelscampos, Abril 11, 2012.

  1. joelscampos

    joelscampos Membro Participativo

    Pessoal, preciso fazer no progress algo como SELECT SKIP 20 FIRST 10 * FROM nome_tabela.
    Porém, o progress não compreende o skip depois do select.

    Alguém já teve que fazer uma busca em que, por exemplo, só precisasse retornar do vigésimo ao trigésimo registro da tabela?

    Trata-se de uma tabela gigante.

    A solução básica seria essa abaixo, porém talvez alguém já tenha encontrado solução melhor:

    DEF VAR cont AS INT.
    FOR EACH tabela FIELDS(cd-unidade) NO-LOCK
    WHERE cd-unidade = 999
    AND dt-emissao-guia >= 01/01/2012
    AND dt-emissao-guia <= 02/01/2012:
    cont = cont + 1.
    IF cont < 20 THEN NEXT.
    IF cont > 30 THEN LEAVE.
    /*armazena...*/
    END.
  2. mcarril

    mcarril Membro Participativo

    Tenta assim:

    blk-loop:
    DEF VAR cont AS INT.
    FOR EACH tabela fields(cd-unidade,dt-emissao-guia) NO-LOCK
    WHERE cd-unidade = 999 AND
    dt-emissao-guia >= 01/01/2012
    AND dt-emissao-guia <= 02/01/2012:
    cont = cont + 1.
    IF cont >=20 OR
    cont <= 30 THEN run proc-faça.
    IF CONTA > 30 then leave blk-loop.

    /*armazena...*/
    END.

    Procedure proc-faça:

    Disp tabela.campo.

    end.
  3. joelscampos

    joelscampos Membro Participativo

    Obrigado pela resposta mcarril,

    ainda não implementei porque vou deixar essa melhoria para o final, e assim que fizer os testes de performance, posto aqui.

Compartilhe esta Página