Os comandos desse tema, em particular RELATE ONE e RELATE MANY, estabelecem e administram as relações entre as tabelas, tanto as relações automáticas como as relações manuais. Antes de utilizar os comandos deste tema, por favor consulte o Manual de Desenho de 4D para informação sobre a criação de relações entre tabelas.
Duas tabelas podem estar relacionadas por uma relação automática. Em geral, quando é criada uma relação automática, os registros relacionados são carregados e selecionados na tabela relacionada. Muitas operações fazem com que a relação seja estabelecida.
Estas operações incluem:
- Entrada de dados
- Lista de registros na tela em um formulário de saída
- Relatórios
- Operações em uma seleção de registros como as pesquisas, as ordenações e as fórmulas.
Para melhorar o rendimento, quando 4D ativa as relações automáticas, apenas um registro é convertido no registro atual para a tabela. Para cada uma das operações numeradas anteriormente, o registro relacionado é carregado de acordo com os seguintes princípios:
- Se uma relação seleciona um só registro da tabela relacionada, o registro se carrega do disco.
- Se uma relação seleciona más de um registro de uma tabela relacionada, uma nova seleção de registros se cria para essa tabela, e a o primeiro registro em essa seleção se carrega do disco.
Por exemplo, na estrutura que se mostra a continuação, se um registro para a tabela [Empregados] se carrega e mostra para a entrada de dados, o registro relacionado na tabela [Empresas] se seleciona e se carrega. Igualmente, se um registro para a tabela [Empresas] se carrega e mostra para a entrada de dados, os registros relacionados com a tabela [Empregados] são selecionados.

Nessa estrutura, a tabela [Empregados] é a
Tabela muitos, e a tabela [Empresas] é a
Tabela um. Para relembrar este conceito, pense que “há muitos empregados relacionados com uma empresa” e “cada empresa tem muitos empregados.”
De maneira parecida, o campo Empresa da tabela [Empregados] é o
Campo muitos, e o campo Nome na tabela [Empresas] é o
Campo um.
Nem sempre é possível que o campo relacionado seja único. Por exemplo, o campo [Empresas]Nome pode ter vários registros de nomes de empresas iguais. Nessa situação a não unicidade pode ser manejada facilmente criando uma relação, a qual sempre será única, ou outro campo na tabela relacionada. Este campo pode ser um número de identificação da empresa.
A tabela a seguir lista os comandos que utilizam as relações automáticas para carregar os registros relacionados durante sua execução. Todos estes comandos utilizam relações automáticas de Muitos a Um. Apenas os comandos marcados com um Sim ativam as relações automáticas de Um a Muitos.
Comando | Relação Um a Muitos |
ADD RECORD | Sim |
ADD SUBRECORD | Não |
APPLY TO SELECTION | Não |
DISPLAY SELECTION | Não |
EXPORT DIF | Não |
EXPORT SYLK | Não |
EXPORT TEXT | Não |
EXPORT DATA | Não |
MODIFY RECORD | Sim |
MODIFY SUBRECORD | Não |
MODIFY SELECTION | Sim (em entrada de dados) |
ORDER BY | Não |
ORDER BY FORMULA | Não |
QUERY BY FORMULA | Sim |
QUERY SELECTION | Sim |
QUERY | Sim |
PRINT LABEL | Não |
PRINT SELECTION | Sim |
QR REPORT | Não |
SELECTION TO Array | Não |
SELECTION RANGE TO Array | Não |
Que as relações sejam automáticas não significa que os registros relacionados ou os registros para uma tabela sejam selecionados simplesmente porque um comando carrega um registro. Em alguns casos, depois de executar um comando que carrega um registro, ás vezes você vai precisar chamar explicitamente aos registros relacionados utilizando RELATE ONE ou RELATE MANY se necessita acessar aos dados relacionados.
Alguns dos comandos listados na tabela anterior (tais como os comandos de pesquisa) carregam o registro atual quando tiver terminada a tarefa. Neste caso, o registro carregado não seleciona automaticamente os registros relacionados a ele. Novamente, se necessita acessar aos dados relacionados, deve selecionar explicitamente os registros selecionados utilizando RELATE ONE ou RELATE MANY.