Duvida Criação de banco com data dictionary

Discussão em 'Progress 4GL' iniciado por Mauricio Osmainchi, Setembro 17, 2014.

  1. Mauricio Osmainchi

    Mauricio Osmainchi Sem Pontuação

    Olhando o banco de exemplo do progress (sports), vi que as chaves estrangeiras foram feitas a mão, ou seja, nas triggers de delete das tabelas que possuem chaves estrangeiras dependentes há um find first como mostra o código abaixo:
    HTML:
    TRIGGER Procedure FOR Delete OF Customer.
    
    /* Variable Definitions */
    
    DEFINE VARIABLE answer AS LOGICAL.
    
    /* Customer record cannot be deleted if outstanding invoices are found */
    
    FIND FIRST invoice OF customer NO-ERROR.
    IF AVAILABLE invoice THEN DO:
       IF invoice.amount <= invoice.total-paid + invoice.adjustment THEN DO:
          MESSAGE "Invoice OK, looking for Orders..."
             VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
          FIND FIRST order OF customer NO-ERROR.
          IF NOT AVAILABLE order THEN DO:
             RETURN.
          END. 
          ELSE DO:
           MESSAGE "Open orders exist for Customer " customer.cust-num
                   ".  Cannot delete."
                   VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
           RETURN ERROR.   
          END.
       END.
       ELSE DO:
          MESSAGE "Outstanding Unpaid Invoice Exists, Cannot Delete"
                  VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
          RETURN ERROR.
       END.
    END. 
    ELSE DO:
       FIND FIRST order OF customer NO-ERROR.
       IF NOT AVAILABLE order THEN DO:
          RETURN.
       END. 
       ELSE DO:
          MESSAGE "Open orders exist for Customer " customer.cust-num
                  ".  Cannot delete."
                  VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
          RETURN ERROR.
       END.
    END.    
    
    Seria esta a única maneira de se fazer chaves estrangeiras? lembrando que estou usando o Progress 10.1c.
    Última edição: Setembro 17, 2014
  2. pizzaia

    pizzaia Membro Participativo

    o único tratamento (que conheço) é na leitura que você pode fazer o find xxxx tabela-filha of tabela-pai .... (só que para isso os campos tem que ser exatamente iguais)
    o resto é tudo via programação (na mão), ou seja, programar o obvio, infelizmente.
  3. Mauricio Osmainchi

    Mauricio Osmainchi Sem Pontuação

    @pizzaia Agradeço pela sua resposta.
    Eu pensava que o of só poderia ser utilizado se além dos campos iguais, também houvesse um index na tabela que tem a chave estrangeira, pois estou construindo o banco com base no banco sports, que é o que veio com o progress, e ele possui tais indexes. Em fim, vi depois que postei que existe nas propriedades da tabela um campo chamado "validation" o qual pede uma expressão que retorne verdadeira para a exclusão, olhando no sports vi que estava sendo utilizado isto em tabelas que não dependiam mais de uma tabela para ser excluída, no caso de tabela que tinha mais de uma dependência, utilizou-se o trigger do delete assim como o código que postei.
    Eu fiz tudo a mão e funcionou, porém queria saber se não estava fazendo de uma forma arcaica demais.
  4. pizzaia

    pizzaia Membro Participativo

    infelizmente é isso mesmo.

Compartilhe esta Página