Último registro for each !!

Discussão em 'Progress 4GL' iniciado por roinfo, Maio 9, 2011.

  1. roinfo

    roinfo Sem Pontuação

    Pessoal, como faço para saber quando estou no último registro em um for each?

    A opção LAST e LAST-OF eu consegui para em um for each com a opção break by.
    Gostaria de saber sem o agrupamento para for each sem break


    Obrigado,
  2. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Agora de cara eu não lembro, mas você pode fazer um contador, e trabalhar com ele....

    Mas com certeza tem uma maneira mais facíl e correta de ser feito!!!
  3. CarlosNobrega

    CarlosNobrega Membro Participativo

    Para identificar o último registro dentro de um for-each usa-se o break-by para capturá-lo.

    Para ler o último registro da cláusula for-each faça um for-last com o mesmo "where".

    Ou se preferir grave em uma variável rowid cada um dos registros lidos e quando acabar o for each faça um "find" através do rowid.

    Outra forma é colocar o for-each em uma "query" dinâmica, e usar o método get-last() da query.

    Se não usar break by deverá ser usado algumas destas soluções, pois o for-each uma vez que é encerrado não deixa mais o registro no Buffer (faz release no registro).


    Existem várias formas de fazer isso, eu considero o uso de break-by a mais fácil.

    Um abraço.
  4. LFBuozi

    LFBuozi Membro Participativo

    Cara, eu acho que entendi o que você quer, nessa hora da manhã só consegui pensar nessa gambiarra terrível aqui, veja se ajuda:
    Código:
    DEF BUFFER bf-emitente FOR emitente.
    FOR EACH emitente WHERE nome-emit BEGINS "z":
        DISP nome-emit FORMAT "x(30)".
        FIND LAST bf-emitente  WHERE bf-emitente.nome-emit BEGINS "z" NO-LOCK NO-ERROR.
        IF bf-emitente.nome-abrev = emitente.nome-abrev THEN DISP "este é o último do for each".
    END.
  5. mcarril

    mcarril Membro Participativo

    [prog=]DEF BUFFER bf-emitente FOR emitente.
    FOR EACH emitente WHERE nome-emit BEGINS "z":
    DISP nome-emit FORMAT "x(30)".
    FIND LAST bf-emitente WHERE bf-emitente.nome-emit BEGINS "z" NO-LOCK NO-ERROR.
    IF bf-emitente.nome-abrev = emitente.nome-abrev THEN DISP "este é o último do for each".
    END.[/prog]

    """CUIDADO""""
    A gambiarra acima busca o último registro que comece por "Z", se na tabela de emitente não existir ninguém com "Z" não encontra nada.
  6. LFBuozi

    LFBuozi Membro Participativo

    Ah sim, no caso do 'WHERE emitente.nome-emit BEGINS "z"' é só para dar um exemplo de where no código, o where não precisa ser exatamente este...rs

Compartilhe esta Página