LINK

Sommaire


Linkpermet de définir un ensemble de liens entre différentes tables, ainsi qu'une abréviation unique, pour accéder à ces tables en une seule instruction. (exemple : Read).

 

Syntaxe

   Linkclass_pWithliste_liensAs class_l [ where_cl] [ order_by_cl ]

 

Paramètres

Elément

Description

Restrictions

class_p

classe désignant l'abréviation du fichier principal.

Le fichier doit être ouvert.

liste_liens

Liste de liens, séparés par le caractère ','.

Nombre de liens<=8

lien

Définition d'un lien sous l'une des formes :
clé '='
liste_expr_clé
clé '~='
liste_expr_clé

Aucune.

clé

Désignation de la clé d'un fichier lié sous l'une des formes :
classe
id_clé
classe
id_clé '('exp_ind ')'

Le fichier lié doit être ouvert.

id_clé

nom_de_variable désignant une clé

Aucune.

exp_ind

Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée.

0<= exp_ind <=nombre de composantes de la clé (au plus 8).

liste_expr_clé

Liste deexpr_clé séparés par le caractère ';' et correspondant aux valeurs des sous-clés.

Au plus 8 sous-clés

expr_clé

Expression quelconque portant sur
- des variables quelconques
- des zones d'une table liée ou de la table principale

Compatible avec le type de la sous-clé suivant opérateur et fonctions.

opérateurs

comparaison =, <, >, <=, >=, <>
arithmétique +, -, *, /, ^
logique and, or, not, xor

Aucune.
Sauf - sur chaîne.
Aucune.

fonctions

Alphanumériques, numériques, dates

Suivant type.

Alphanumérique

left$,right$, mid$, seg$, len, num$, ctrans, tolower, toupper, val, ascii, chr$,instr, pat, string$, space$, mid$, virebl.

Aucune.

Numérique

abs,int, ar2, avg, var, prd.

Aucune

Date

Aucunefonction n'est admise

Multi-type

find,max, min, sigma, uni.

Saufsur type Date

class_l

classe désignant une abréviation permettant d'accéder à l'ensemble des fichiers liés.

L'abréviation doit
être unique.

where_cl

Voirinstruction Where

Aucune.

order_by_cl

Voirinstruction Where

Aucune.

 

Exemples

   # Extrait d'un traitement donnant l'historique des produits par client :
   # Ouverture des fichiers principal et liés, avec un critère de
   # sélection sur le fichier PRODUIT
    File HISTORIQUE [HIS], CLIENT [CLI], PRODUIT [PRO]
    &    Where [PRO]CLE >= [M:E]PRPRO & [PRO]CLE <= [M:E]DRPRO
   #
   # Définition des liens entre le fichier HISTORIQUE et le fichier
   # PRODUIT d'une part, le fichier CLIENT d'autre part. Définition de
   # l'abréviation de lien [LIEN] et de la pseudo-clé KEY1
   Link [HIS] With[PRO]CODPRO = NUMPRO, [CLI]NUMCLI = NUMCLI
    &    As [LIEN]
    &    Order By Key KEY1 = [PRO]CLE;[CLI]CLE
   #
   # Utilisation immédiate
    For [LIEN]KEY1
        PRIHT += [HIS]PRIHT*(([HIS]TYPCOM = 1)-([HIS]TYPCOM = 2))
    Next

   # Déclaration de fichiers et définition d'un lien avec tri des
   # factures par département des clients.
    File FACTURE [FAK], CLIENT [CLI]
   
Link [FAK] With[CLI]NUMCOD = NUMCOD As [DEP]
    &    Order By Key DEPT = [F:FAK]ADFAC(2)

 

Description et commentaires

Linkpermet de définir un ensemble de liens entre une table principale et des tables annexes, en précisant d'éventuels critères de sélection et de tri, et de définir une abréviation (que nous appellerons abréviation de lien) pour accéder à l'ensemble de ces tables par une seule instruction Read ou For. Table principale et tables liées doivent avoir été ouvertes au préalable par un ordre File ou Local File.

- Une jointure est de type extérieure gauche si l'on précise le caractère '='; dans ce cas, on récupère la classe [F] de la table principale qui n'a pas d'enregistrement lié dans la table secondaire . 
Une jointure est de type stricte si l'on précise le caractère '~='; dans ce cas, on ne récupère pas la classe [F] de la table principale qui n'a pas d'enregistrement lié dans la table secondaire . 

- L'abréviation du fichier principal permet d'accéder à ce fichier (en lecture ou en écriture) en utilisant les clés définies en paramétrage, à moins qu'une clause Order by n'ait redéfini une clé sur ce fichier.

- La clause Order By de Link permet de définir (ou de redéfinir) l'index de parcours du fichier principal lorsqu'on utilise l'abréviation de lien. Lors d'un Read (sur le fichier principal) avec cette abréviation, Adonix essaie de lire l'enregistrement correspondant du fichier principal, puis un enregistrement dans chaque fichier annexe en fonction de ce qui a été donné dans liste_liens. Si cette clause existe, seuls l'index y figurant est utilisable lors d'une opération sur le fichier. Se reporter à la documentation spécifique à cette clause pour plus de détails.

- Les clés utilisables avec l'abréviation de lien sont :

La clause Where permet de restreindre l'accès aux enregistrements des fichiers pour lesquels l'expression donnée est vérifiée. Elle ajoute une restriction supplémentaire aux éventuelles clauses Where définies sur les fichiers à lier (le cas échéant). Précisons que cette expression (sauf dans le cas où c'est le champ d'un fichier) est évaluée à l'ouverture de la table (contrairement aux versions précédentes). La liste des opérateurs et fonctions utilisables est limitée. Se reporter à la documentation spécifique à cette clause pour plus de détails.

- L'abréviation de lien ne permet pas d'accéder au fichier principal en écriture (par Delete, Write , Rewrite ou Update).

- Il n'y a pas de classe [G] associées à l'abréviation de lien.

- L'abréviation de lien doit être unique. Si un fichier est déjà ouvert avec cette abréviation, il n'est pas refermé par Adonix mais un message d'erreur est généré. Le comportement de Link est alors équivalent à celui d'un Local File.

- On ne peut définir de lien que sur des tables situés sur le même serveur.

- On peut définir un filtre (par Filter) sur un fichier de lien.

- On peut définir un lien avec des niveaux hiérarchiques.   
Sous SQL Server, il est impératif de déclarer les tables dans leur ordre de définition des clés de jointure. 
Link [HIS] With              ---> définition de l'abréviation [HIS] 
& [CLI]CLE = [HIS]NUMCLI,   
---> définition de l'abréviation [CLI]. utilisation possible de [HIS] 
& [ADD]CLE = [CLI]CLIENT       ---> définition de l'abréviation [ADD].utilisation possible de [HIS] [CLI]  

- On peut définir un Link d'une table sur elle-même, et ainsi associé 2 enregistrements d'une même table.     

- lorsqu'on est sur une jointure est de type extérieure gauche, pour récupérer la classe [F] de la table principale qui n'a pas d'enregistrement lié dans la table secondaire, il ne faut pas avoir de critère dans la clause where sur un champ de la table secondaire.  Dans ce cas, le système ne récupèrerait que les jointures strictes pour lesquelles la clause where est vérifiée. 

- Le close de l'abréviation du link supprime le link. Le close de la table principale du link ferme cette table et la classe du link n'est plus disponible. 

Remarques

Soient la table AAA de champs A1, A2, A3 et la table BBB de champs B1, B2, B3 et de clef BBB0. Il y a deux manières d'écrire un Link entre ces deux tables sachant que la clause Where est A1=[L]C1 and A2=[L]C2. Dans tous les cas, la seconde solution est à privilégier devant la première.

1. Link [AAA] with[BBB]BBB0=A1;A2;A3 As [LNK]
For [LNK] Where A1=[L]C1 and A2=[L]C2
#
Next

2. Link [AAA] with [BBB]BBB0=[L]C1;[L]C2;A3 As [LNK]
For [LNK] Where A1=[L]C1 and A2=[L]C2
#
Next

Dans la première syntaxe, Oracle prend tous les enregistrements de BBB et n'élimine ceux en trop que quand il fait la jointure, alors que dans la seconde syntaxe, Oracle ne sélectionne tout de suite que les enregistrements de BBB souhaités.

 

Nouveautés de la version 140

Une jointure est de type stricte si l'on précise le caractère '~='; dans cecas, on ne récupère pas la classe [F] de la table principale qui n'a pasd'enregistrement lié dans la table secondaire . 

On peut maintenant définir plusieurs liens sur une même table ( jusqu'à 8 ).Ceci implique que la définition d'un deuxième lien sur un fichier donné nerefermera plus le premier.

   # les 2 classes [XXX] et [YYY] sontconservées.

   Link [ABC] With ...As [XXX]

   Link [ABC] With ...As [YYY]

Erreurs associées

Erreur

Description

PAFIC(20)

-Le fichier principal n'est pas ouvert.
- L'abréviation du fichier principal est une abréviation de lien.

ERREOP(28)

Abréviation(de lien) déjà utilisée.

PACLE(21)

Cléinexistante (fichier lié).

ERCLAS( 7)

Fichierprincipal ou fichier lié non ouvert.

 

Mots-clés associés

READ - FILE - FILTER - ORDER - WHERE - CHOOSE - FOR- TREEBOX


SOMMAIRE

Adonix X3® L4G
Copyright © Adonix 1999 - All rights reserved