L4G >  Link  

Afficher tout Masquer tout

Link permet 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

   Link class_p With liste_liens As 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<=12

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 16).

liste_expr_clé

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

Au plus 16 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

Aucune fonction n'est admise

spacer.gif (822 octets)

Multi-type

find, max, min, sigma, uni.

Sauf sur 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

Voir instruction Where

Aucune.

order_by_cl

Voir instruction 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)

   # Déclaration de fichiers et définition d'un lien avec tri des
   # factures par département des clients.
    File ATABLE [ATB], ATABIND [ATI]
   
Link [ATB] With [ATI]CODIND = CODFIC As [LNK]
    &    Where
CODFIC = "AOBJET"
    For [LNK]
      Infbox [ATB]INTIT
      Infbox [ATI]DESCRIPT
      # Infbox [LNK]INTIT   ok car champ de la table principale
      #
Infbox [LNK]DESCRIP planterait en variable inexistante car appartient à la table secondaire
    Next

   # Liens avec une constante
    File ATABZON [ATZ], ATEXTE [ATX]
   
Link [ATZ] With [ATX]NUMERO=GLANGUE;[F:ATZ]NOLONG
    &    As [LNK] 
    &    Where
[F:ATZ]CODFIC = [M]ATB

   # Liens avec utilisation de la fonction num$
Link [TRO] With
& [AXX]AXX0="TABROUALT";"TRODESAXX";GLANGUE;num$([F:TRO]ROUALT);""

Description

Link permet de définir un ensemble de liens entre une table principale et des tables annexes ( jusqu'à 12 ).

Table principale et tables liées doivent avoir été ouvertes au préalable par un ordre File ou Local File.

Il est possible d'y préciser des 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.

A chaque lecture sur l'abréviation de lien, la classe [F] de chaque table est chargée, la classe lien n'est chargée qu'avec les champs de la table principale. ( les champs des tables secondaires ne sont d'ailleurs pas connus dans cette abréviation). On utilisera donc la classe lien pour faire les lectures par Read ou For, les classes [F] pour lire ou alimenter les champs, l'abréviation des tables, pour faire les opérations d'écriture, de suppression par Write, Rewrite, Update, Delete.

Attention ! Ne pas pas utiliser l'abréviation de lien avec les instructions suivantes : Write, Rewrite, Update, Delete.

- Une jointure est de type extérieure gauche si l'on précise le caractère '=' : on lit l'enregistrement 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 '~=' : on ne lit pas l'enregistrement de la table principale qui n'a pas d'enregistrement lié dans la table secondaire. 

- La clause With de Link permet de définir le lien entre 2 tables. On utilise généralement un lien entre la table principale et la table secondaire.

- 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 clé définie dans la clause Order By du Link (s'il y en a une) ;
  • sinon, la clé définie dans la clause Order By du File, correspondant au fichier principal (s'il y en a une) ou du dernier Filter fait sur ce fichier;
  • sinon, l'une des clés définies en paramétrage du fichier principal.

- Les clés utilisables avec l'abréviation de la table principale : 
cette abréviation permet d'accéder à cette table principale (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 cette table.

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.

- 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 lien avec des constantes ( 32 maximum ).   
    File ATABZON [ATZ], ATEXTE [ATX]
   
Link [ATZ] With [ATX]NUMERO=GLANGUE;[F:ATZ]NOLONG  ---> Utilisation de la variable globale GLANGUE comme constante 
    &    As [LNK] 
    &    Where
[F:ATZ]CODFIC = [M]ATB

- 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.

A partir de la version 6, le Link supporte la fonction num$. (voir dans les exemples). Par contre, cela ne supporte pas la conversion date.

 

Evolutions

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 . 

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é ne refermera plus le premier.

   # les 2 classes [XXX] et [YYY] sont conservé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)

Fichier principal ou fichier lié non ouvert.

 

Mots-clés associés

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