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.
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.
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.