LOOK

Sommaire


"look" permet de vérifier l'existence d'un enregistrement correspondant à une valeur de clé donnée.

 

Syntaxe

   Look [ classe ] [ clé ] mode_lect [ valeur_clé ]

 

Paramètres

Elément

Description

Restrictions

clé

Désignation de la clé d'un fichier sous l'une des formes suivantes :

  • nom_de_variable
  • nom_de_variable '('exp_ind ')'

La clé doit être définie dans une clause Order By ou en paramétrage de la table.

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

mode_lect

L'un des mots-clés suivants, ou l'un des opérateurs suivants :

mot-clé

opérateur

Mode de lecture utilisé

First
Last
Curr
Prev
Next






>=
>
=
<
<=

1er enregistrement
Dernier enregistrement
Enregistrement courant
Enregistrement précédent
Enregistrement suivant
Clé >=
valeur_clé
Clé > 
valeur_clé
Clé = 
valeur_clé
Clé < 
valeur_clé
Clé <= 
valeur_clé

valeur_clé

Liste d'expressions séparées par ';' correspondant aux valeurs des sous-clés.

valeur comptatible avec le type de la sous-clé

 

Exemples

# 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 ?
Look First
If fstat
    Errbox "Le fichier est vide !"
Endif

 

Description et commentaires

"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

spacer.gif (822 octets)

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.

Nouveautés de la version 140

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"

 

Erreurs associées

Erreur

Description

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

 

Mots-clés associés

FILE - READ - FOR - READLOCK - FILTER - ORDER - WHERE - FSTAT   -  CURRIND  -   CURRLEN


SOMMAIRE

Adonix X3(r) L4G
Copyright (c) Adonix 1999 - All rights reserved