LINK |
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).
Linkclass_pWithliste_liens
Elément | Description | Restrictions |
classe désignant l'abréviation du fichier principal. | Le fichier doit être ouvert. | |
Liste de liens, séparés par le caractère ','. | Nombre de liens<=8 | |
Définition d'un lien sous l'une des formes : | Aucune. | |
Désignation de la clé d'un fichier lié sous l'une des formes : | Le fichier lié doit être ouvert. | |
nom_de_variable désignant une clé | Aucune. | |
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 deexpr_clé séparés par le caractère ';' et correspondant aux valeurs des sous-clés. | Au plus 8 sous-clés | |
Expression quelconque portant sur | Compatible avec le type de la sous-clé suivant opérateur et fonctions. | |
comparaison =, <, >, <=, >=, <> | Aucune. | |
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 |
where_cl | Voirinstruction Where | Aucune. |
order_by_cl | Voirinstruction Where | Aucune. |
# 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)
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
& [CLI]CLE = [HIS]NUMCLI, ---> définition de l'abréviation [CLI]. utilisation possible de [HIS]
- 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.
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.
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.
PAFIC(20) | -Le fichier principal n'est pas ouvert. |
ERREOP(28) | Abréviation(de lien) déjà utilisée. |
PACLE(21) | Cléinexistante (fichier lié). |
ERCLAS( 7) | Fichierprincipal ou fichier lié non ouvert. |
READ - FILE - FILTER - ORDER - WHERE - CHOOSE - FOR- TREEBOX
Adonix X3® L4G |