SET RELATION
 Relaciona duas áreas de trabalho por um valor chave ou número de registro
------------------------------------------------------------------------------

 Sintaxe

     SET RELATION TO [<expChave> | <nRegistro> INTO <xcAlias>]
        [, TO <expChave2> | <nRegistro2> INTO <xcAlias2>...]
        [ADDITIVE]

 Argumentos

     TO <expChave> é uma expressao usada para executar um SEEK na área
     filho cada vez que o ponteiro é movido na área pai.  Para este
     trabalho, a área filho deve ter ao menos um índice em uso.

     TO <nRegistro> é uma expressao usada para executar um GOTO para um
     registro de número correspondente na área filho cada vez que o ponteiro
     é movido na área pai.  Se <nRegistro> é avaliado para RECNO(), a
     relaçao usa o número do registro pai para executar um GOTO no mesmo
     número de registro na área filho.  Para que o tipo de expressao
     numérica na relaçao seja executado corretamente, a área filho deve nao
     ter um índice em uso.

     INTO <xcAlias> identifica a área filho e pode ser especificado como
     um alias literal ou uma expressao caractere entre parênteses.

     ADDITIVE adiciona as relaçoes filho especificadas a relaçoes já
     existentes na área de trabalho corrente.  Se esta cláusula nao for
     especificada, relaçoes existentes na área corrente serao liberadas
     antes das relaçoes filho serem configuradas.

     SET RELATION TO sem argumentos libera todas as relaçoes definidas na
     área corrente.

 Descriçao

     SET RELATION liga uma área pai a uma ou mais áreas filho usando uma
     expressao chave, número de registro, ou expressao numérica.  Cada área
     pai pode ser ligada a até oito áreas filho.  Uma relaçao faz com que o
     ponteiro de registro da área filho mova-se de acordo com o movimento na
     área pai.  Se nao houver uma correspondência entre a área pai e área
     filho, o ponteiro de registro na área filho é posicionado em LASTREC()
     + 1, EOF() retorna verdadeiro (.T.), e FOUND() retorna falso (.F.).

     O método de ligaçao entre a área pai e a área filho depende do tipo de
     <expChave> e da presença de um índice ativo na área filho.  Se a área
     filho tem um ídice ativo, a pesquisa é via SEEK padrao.  Se a área
     filho nao tem um índice ativo e o tipo de <expChave> é numérico, um
     GOTO é executado na área filho.

 Notas

       Relaçoes cíclicas: Uma área pai nao pode ser relacionada
        a ela mesma, seja direta ou indiretamente.

       Softseek: SET RELATION nao comporta SOFTSEEK e sempre se
        comporta como se SOFTSEEK estivesse desligado, ainda que esteja
        ligado.  Em outras palavras, caso nao seja encontrada a chave na
        área filho, o ponteiro da área filho é colocado em LASTREC() + 1.

       Relaçoes com número de registro: Para relacionar duas
        áreas baseando-se em números de registro correspondentes, use
        RECNO() para expressoes de SET RELATION TO e certifique-se de que a
        área filho nao tenha índices ativos.

 Exemplos

       O exemplo seguinte relaciona três áreas numa configuraçao
        pai-filho múltipla com o arquivo Customer relacionado com ambos
        Invoices e Zip:

        USE Invoices INDEX Invoices NEW
        USE Zip INDEX Zipcode NEW
        USE Customer NEW
        SET RELATION TO CustNum INTO Invoices, TO Zipcode INTO Zip
        LIST Customer, Zip->City, Invoices->Number, Invoices->Amount

       Mais tarde, você pode adicionar um novo filho usando
        ADDITIVE, como segue:

        USE BackOrder INDEX BackOrder NEW
        SELECT Customer
        SET RELATION TO CustNum INTO BackOrder ADDITIVE

 Arquivos:  Biblioteca CLIPPER.LIB.
 To download this example - click here.

See Also: DBRELATION() DBRSELECT() FOUND() RECNO()