Boa tarde Gostaria de saber como posso exibir apenas os três ultimos registros de um for each. Obrigado desde Já. Diego
Boa tarde Caros. Após quebrar a cabeça consegui utilizando o for each ...algumas variaveis de controle e find last. Até Mais.
Caro colega, Nao sei como vc conseguiu, mas uma sugestao a mais nunca é demais, veja o codigo abaixo, mostrando os 10 primeiros registros:
Olha só, para imprimir os três últimos registros tu pode fazer conforme abaixo é meio tosco mas funciona. Código: DEF VAR Rc AS INT. FIND LAST customer NO-LOCK NO-ERROR. rc = RECID(customer). FOR EACH customer WHERE int(recid(customer)) = rc OR int(recid(customer)) = rc - 2 OR int(recid(customer)) = rc - 1 NO-LOCK. DISP custNum RECID(customer). END.
Ola, Srs! É importante frisar que sempre existem varios caminhos pra se chegar no mesmo objetivo. Todos acima estão certos, com mais ou menos lógica ou esforço. Só é necessário ressaltar, que mostras os ultimos 3 registros depende antes de mais nada, de interpretacao. Por exemplo, deseja-se mostrar os ultimos 3 registros CADASTRADOS (ou seja, os 3 mais RECENTES). Primeira coisa a se avaliar é o índice default da tabela. Se o indice for por exemplo, CODIGO com ordenação ASCENDENTE, as rotinas acima irão mostrar os 3 primeiros! Logo, nas lógicas acima, é necessário ORDERNAR da forma que se necessita. Por exemplo, para saber os ultimos 3 codigos (os mais recentes e consequentemente, os maiores), faz-se em qualquer lógica acima: Código: FOR EACH customer WHERE ... BY custNum DESC: Para ver a diferença é simples. Execute os códigos abaixo e perceba a diferenca: 1-Sem definição de ordenação, usa default da tabela. Código: FOR EACH emitente: DISP cod-emitente. END. 2-Com definição de ordenação por código, do maior pro menor (BY e DESC). Código: FOR EACH emitente BY cod-emitente DESC: DISP cod-emitente. END. Dai, só aplicar uma das lógicas acima ou de qualquer outra, que atinja o mesmo objetivo. Abs! Comunidade Progress Vale do Paraiba, Sul de MG e Sul Fluminense