DEFINE TEMP-TABLE

Discussão em 'Comandos Básicos' iniciado por fdantas, Março 13, 2009.

  1. fdantas

    fdantas Administrator Moderador

    /******************** STATEMENTS**********************************
    **
    ** DEFINE TEMP-TABLE nome-temp-table
    ** E uma tabela volatil e que so existira
    ** em tempo de processamento, entretanto
    ** e superior ao antigo DEF WORKFILE por
    ** que realiza swap no disco rigido, tor-
    ** nando sua capacidade de armazenamento
    ** de dados ilimitada.
    **
    ** FIELD (DEFINE TEMP-TABLE...)
    ** Serve para definir cada um dos campos
    ** da tabela volatil.
    **
    ** INDEX nome-index IS PRIMARY (DEFINE TEMP-TABLE...)
    ** Faz parte da sintaxe da definicao da
    ** TEMP-TABLE e sua utilidade e definir
    ** os indices.
    **
    ** VALIDATE(situacao verdade, "mensagem de erro")
    ** E uma funcao que se destina a validar
    ** uma determinada expressao e retornar
    ** uma mensagem caso a expressao nao
    ** seja igual a true.
    **
    ** CAN-DO("substrings aceitas", string-a-ser-testada)
    ** Verifica em uma string se compoe pelo
    ** menos uma das substrings listadas.
    **
    **
    **********************************************************************/
    Código:
    DEF VAR op-rel AS CHAR 
                       FORMAT "X(1)" INITIAL "1".
    
    DEFINE TEMP-TABLE view-cust-order
       FIELD tt-cust-num  LIKE customer.cust-num  LABEL "Codigo"
       FIELD tt-cust-name LIKE customer.name      LABEL "Nome" 
       FIELD tt-cust-bal  LIKE customer.balance   LABEL "Balance" 
       FIELD tt-order     LIKE order.order-num    LABEL "Pedidos"
       INDEX cod-cli  IS PRIMARY tt-cust-num ASCENDING
       INDEX cust-name tt-cust-name.
    
    FOR EACH customer: 
        FOR EACH order OF customer:        
            CREATE view-cust-order.
            ASSIGN tt-cust-num  = customer.cust-num
                   tt-cust-name = customer.name
                   tt-cust-bal  = customer.balance
                   tt-order = order.order-num.
        END.
    END.                
    
    UPDATE "1 - Pedidos do Cliente"  SKIP(1)
           "2 - Clientes"            SKIP(1)       
           op-rel LABEL "Opcao"                     
           VALIDATE(CAN-DO("1,2", OP-REL) 
           /* op-rel = "1" or op-rel = "2" */, 
                    "Opcao invalida")
           WITH CENTERED SIDE-LABEL ROW 4
           TITLE "Escolha o Relatorio:".
           
    HIDE ALL.       
                                
     
    IF op-rel = "1" THEN 
       FOR EACH view-cust-order 
           BREAK BY view-cust-order.tt-cust-num:
           IF FIRST-OF(tt-cust-num) THEN
              DISPLAY view-cust-order.tt-cust-num
                      view-cust-order.tt-cust-name
                      WITH CENTERED.
           DISPLAY tt-order.
       END.                        
    ELSE
       FOR EACH view-cust-order 
           BREAK BY view-cust-order.tt-cust-name:
           IF FIRST-OF(view-cust-order.tt-cust-name) THEN
              DISP view-cust-order.tt-cust-name WITH CENTERED.
       END.
    
    
    
  2. sl4v3r

    sl4v3r Membro Participativo

    Vale lembrar que as Temptables substituiram as workfiles.
  3. Agnaldo

    Agnaldo Membro Ativo

    Não.

    Temp-table é uma tabela temporária em disco.
    Work-table, que antes era chamada de workfile, é uma tabela temporaria em memória.
  4. sl4v3r

    sl4v3r Membro Participativo

    Tudo bem me expressei mal... a Progress pediu para parar de utilizar workfile e utilizar temp-table.
    Qualquer dúvida veja no ABL Handbook.

Compartilhe esta Página