LOOK |
"look" permet de vérifier l'existence d'un enregistrement correspondant à une valeur de clé donnée.
Look [ classe ] [ clé ] mode_lect [ valeur_clé ]
Elément | Description | Restrictions | ||||||
Désignation de la clé d'un fichier sous l'une des formes suivantes :
| La clé doit être définie dans une clause Order By ou en paramétrage de la table. | |||||||
Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée. | 0 <= | |||||||
L'un des mots-clés suivants, ou l'un des opérateurs suivants :
| ||||||||
Liste d'expressions séparées par ';' correspondant aux valeurs des sous-clés. | valeur comptatible avec le type de la sous-clé |
# Série de lectures dans un fichier [TEST] dont les clés sont
# - une clé CLE1 (un élément alphanumérique);
# - une clé CLE2 (un élément date, un élément alpha, un élément
# entier).# Voir s'il existe 10 enregistrements dans lefichier dans l'ordre de
# la clé CLE2 après l'enregistrement dont la clé CLE1 est inférieure
# à la valeur donnée.
Look[TEST]CLE2 < date$; "XYZ"; 15*3
I = 0
While fstat <> 0 & fstat <> 2 & I <10
Look [TEST]CLE2 Next
I += 1
Wend
# Si fstat est non nul, il y a euenregistrement inexistant
# Mais sous Oracle on utilisera une boucle For ainsi
# (avec perte de la classe [F] courante)
I = 0
For [TEST]CLE2 Where CLE2 < date$; "XYZ" ;15*3
I += 1
If I = 10 : Break : Endif
Next# L'enregistrement dont la clé CLE1 est >= "ABCD" existe-t-il ?
Look[TEST]CLE1 >= "ABCD"
If [S]fstat <= 2
Read Curr
Endif# Le fichier [TEST] est-il vide ?
LookFirst
If fstat
Errbox "Le fichier est vide !"
Endif
"Look" permet de vérifier l'existence d'un enregistrement particulier dans une table selon les divers modes énumérés dans le tableau ci-dessus. Si on ne donne pas de valeur de clé pour les modes qui en demandent une ( '<' '>' '<=' '>=' '=' ), la valeur courante des variables de la classe [F] correspondante est utilisée.
Les clés utilisables dans "Look" sont nécessairement celles définies en paramétrage de la table ou sinon celle définie dans la clause Order by de l'ordre File ou Filter.
Il n'est pas possible d'utiliser "Look" avec l'abréviation de lien.
On peut omettre dans la syntaxe de "Look" l'abréviation de la table ou le nom de la clé :
- dans le premier cas, la table utilisée est la table par défaut ;
- dans le deuxième cas, la clé utilisée est la clé courante,c'est-à-dire :
La lecture d'un enregistrement, avec la précision d'une partie de clé, positionne la variable [G]currlen ; Cette variable contient en effet, le nombre de partie de clé utilisée ; Par défaut, elle est positionnée à la valeur 0.
"Look" met à jour la variable fstat pour indiquer comment s'est déroulée la lecture.
fstat | Code | Lu | Explication |
0 | Oui | La lecture a eu lieu correctement. | |
2 | ERECIND | Oui | En mode de lecture <= ou >= , signale que la lecture a eu lieu, mais que la clé trouvée est < ou > à la valeur recherchée. |
4 | ERDEBF | Non | En mode Next ou Prev, signale qu'on a atteint le début ou la fin du fichier. |
5 | ERPALEC | Non | En mode >, >=, =, <= ou <, signale qu'il n'y a pas d'enregistrement correspondant aux valeurs passées en paramètre. |
Les variables de la classe [F] ne sont pas modifiées par "Look" contrairement à "Read". Par contre, [S]fstat sont mis à jour et l'enregistrement cherché devient l'enregistrement courant du fichier (on pourra utiliser le mode Curr).
"Look" ne permet pas de savoir si l'enregistrement est verrouillé ou non. Pour cela il faut utiliser l'instruction Readlock.
Dès qu'on a plusieurs enregistrements à vérifier, on utilisera l'instruction "For" de préférence à "Look".
"Look" pose les mêmes problèmes d'optimisation que "Read". Se reporter à la documentation de cette instruction.
Lorsque l'on fait un Look direct en utilisant une clé avec homonyme, la requête Sql est générée avec un tri systématique sur le rowid. Ce fonctionnement est très bien, si on veut ensuite lire d'autres enregistrements par le Look next, sinon il s'avère peu performant pour une seule lecture. Le tri sur le rowid ne sera pas généré dans le requête si on précise le nombre total de parties de clé. Exemple :
# table ACCES avec la clé avec homonyme CODACC ( USR, CODACC )
# tri sur USR, CODACC et rowid
Local File ACCES[ABR]
Look [ABC] CODACC First
Look [ABC] CODACC="XY","ZZZ"
# tri sur USR, CODACC
Local File ACCES[ABR]
Look [ABC] CODACC(2) First
Look [ABC] CODACC(2)="XY","ZZZ"
MODIN(22) | Modede lecture incorrect. |
ERINDI( 8) | Le nombre de valeurs données, ou l'indice indiqué, dépasse le nombre d'éléments de la clé. |
PACLE(21) | La clé est inexistante sur ce fichier. |
ERCLAS( 7) | Laclasse fichier n'existe pas (fichier non ouvert). |
FILE - READ - FOR - READLOCK - FILTER - ORDER - WHERE - FSTAT - CURRIND - CURRLEN
Adonix X3(r) L4G |