1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Posicionamento de Tabelas (inicio e Fim)

Discussão em 'Progress 4GL' iniciado por pedro_lemes, Abril 9, 2009.

  1. atila.cm

    atila.cm Membro Participativo

    Pedro:

    Veja se o exemplo abaixo lhe ajuda, trata-se de uma alternativa interessante

    DEFINE BUFFER b-tabela FOR tabela.
    FOR EACH tabela NO-LOCK:
    /* testo se existe um registro anterior ao que estou posicionado */
    IF NOT (CAN-FIND (FIRST b-tabela WHERE b-tabela.chave < tabela.chave)) THEN
    MESSAGE tabela.chave " primeiro registro" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    /* testo se existe um registro posterior ao que estou posicionado */
    IF NOT (CAN-FIND (LAST b-tabela WHERE b-tabela.chave > tabela.chave)) THEN
    MESSAGE tabela.chave " primeiro registro" VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.

    Espero que lhe ajude.

    Abraços

    Atila C. Mizerkówski
    atila.cm@hotmail.com
  2. betopac

    betopac Sem Pontuação

    Find First e Find Last não ajudariam neste caso???

    É exatamente para isto que foram criados...
  3. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Posso estar enganado e não conhecer mais um recurso do progress que venha te ajudar nesta, mas faço aqui meus comentários:

    01) Quando acionamos o FIND FIRST ou FIND LAST, para saber o primeiro e o ultimo registro da tabela vai depender de qual INDICE estamos acionando ou de qual INDICE o próprio progress estará acionando para efetuar a busca pela seleção informada, ou seja, o progress procura pelo melhor indice de acordo com a seleção informada;

    02) Sendo assim, utilizando de indices diferentes, o primeiro ou último registro poderá ser diferentes em cada situação;

    03) Se usar o FIND terá que tratar após a leitura, comparando o registro anterior para saber se é o mesmo.

    04) Se usar o FOR EACH, tem a opção do BREAK BY (FIRST-OF ou LAST-OF), lembrando que neste caso será considerado o primeiro registro dentro do bloco FOR EACH e não dentro da TABELA lida.
  4. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,


    Elaborei uma rotina que poderá ajudar e até mesmo ser incrementado mais opções, trata-se de uma include para que possa ser validado se o registro é o primeiro ou o último da tabela:
    Código do Programa A:
    Código:
    
    find first item no-lock no-error.
    
    {c:\temp\programa_b.i "item" "bf_item_01" recid(item) item.it-codigo}.
    
    find last item no-lock no-error.
    
    {c:\temp\programa_b.i "item" "bf_item_02" recid(item) item.it-codigo}.
    
    find prev item no-lock no-error.
    
    {c:\temp\programa_b.i "item" "bf_item_03" recid(item) item.it-codigo}.
    
    


    Código do Programa B:
    Código:
    
    
        def buffer {2} for {1}.
    
        /*** Primeiro Registro ****/
        find first {2} where recid({2}) = {3} no-lock.
        find prev  {2}                        no-lock no-error.
    
        if not avail {2} then
            message "Primeiro Registro da Tabela: " {4} view-as alert-box.
        
        /*** Ultimo Registro ****/
        find first {2} where recid({2}) = {3} no-lock no-error.
        find next  {2}                        no-lock no-error.
    
        if not avail {2} then
            message "Ultimo Registro da Tabela: " {4} view-as alert-box.
    
    


    Onde no programa, ao inserir a Include depois do FIND deve-se informar os parâmetros na seguinte ordem:

    1 => Nome da Tabela que está sendo lida;
    2 => Nome do Buffer da tabela que será criado;
    3 => RECID do registro lido no momento;
    4 => Código Principal do item (chave da tabela) para ser mostrado na tela (opcional).


    Att.



    Eduardo Leite

    Arquivos Anexados:

Compartilhe esta Página