READLOCK |
Readlockpermet de faire des lectures sur une table, par une clé d'accès ou un index temporaire, en verrouillant l'enregistrement lu.
Readlock [ classe ] [ clé ] mode_lect [ valeur_clé ]
[ With lockwait = exp_temps ]
Elément | Description | Restrictions | ||||||||
clé | 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 | ||||||||
exp_ind | Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée. | 0 <= | ||||||||
| ||||||||||
valeur_clé | Liste d'expressions séparées par ';' correspondant aux valeurs des sous-clés. | Valeur compatible avec le type de la sous-clé | ||||||||
exp_temps | Expression numérique donnant le nombre de secondes pendant lequel Adonix va essayer de verrouiller l'enregistrement. |
# Boucle de lecture et de verrouillage du premier enregistrement de la
# table [CLI] tant qu'il n'est pas déverrouillé.
Trbegin CLEINT [CLI]
Repeat :Readlock
Commit
# Tentative de lecture et de verrouillage d'un enregistrement du
# fichier STK jusqu'à ce qu'il soit déverrouillé. CLE est composée
# d'un élément numérique et d'un élément alphanumérique.
RepeatReadlock
# ... suite du traitement
Unlock [STK]
# Lecture et verrouillage du dernier enregistrement dans l'ordre de la
# clé CLE2 (un élément date, un élément alpha, un élément entier),
# pour laquelle on a une clé partielle inférieure aux valeurs données.
# Le fichier lu est le fichier par défaut.
Readlock CLE2(2)< [29/05/1959]; "BOPP"
Readlockpermet de lire une table selon les divers modes énumérés dans le tableau ci-dessus en verrouillant l'enregistrement lu.
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] correspondant au fichier est utilisée.
Il est important de faire un Unlock du fichier, dès que possible afin de ne pas bloquer les autres utilisateurs et pour libérer les verrous systèmes utilisés par les Readlock.
En absence de clause With lockwait, Readlock essaye de verrouiller l'enregistrement pendant le nombre de secondes défini par la variable système Adonix [S]lockwait. Sinon Readlock essaye de le faire pendant le nombre de secondes donné et sans modifier la valeur de [S]lockwait. Si ce nombre vaut zéro, un seul essai sera fait. S'il est négatif, le verrouillage sera tenté sans limitation de temps.
Les clés utilisables dans Readlock sont :
Lorsqu'on utilise l'abréviation de lien (définie lors d'un Link précédent) dans un Readlock, Adonix essaie de lire un enregistrement du fichier principal selon la clé donnée puis un enregistrement dans chaque fichier lié selon la clé et le mode de lecture donnés dans Link.
On peut omettre dans la syntaxe de Readlock l'abréviation du fichier ou le nom de la clé :
La lecture d'un enregistrement, avec la précision d'une partie de clé, positionne automatiquement la variable [G]currlen ; Cette variable contient en effet, le nombre de partie de clé utilisée ; Attention, toute lecture suivante, sans précision de clé, s'effectuera sur la même partie de clé. Pour lire sur une clé entière, préciser la clé ou bien positionner la variable [G]currlen à la valeur 0. La valeur 0 est la valeur par défaut.
La variable fstat indique comment s'est déroulée les opérations.
fstat | Code | Lu | Verr. | Explication |
0 | Oui | Oui | Lecture et verrouillage corrects. | |
1 | ERLOCK | Oui | Non | L'enregistrement lu était déjà verrouillé. |
2 | ERECIND | Oui | Oui | En mode <= ou >=, signale que lecture et verrouillage ont eu lieu, mais que la clé trouvée est < ou > à la valeur recherchée. |
4 | ERDEBF | NON | Début / Fin de fichier (Next, Prev, First, Last). | |
5 | ERPALEC | NON | Pas d'enregistrement correspondant aux valeurs demandées (>=, >,=,<,<=). |
Lorsque la lecture a réussi (c'est-à-dire si fstat est nul ou vaut éventuellement ERLOCK ou encore ERECIND), les variables de la classe [F] correspondant au fichier contiennent les valeurs de l'enregistrement lu. Cet enregistrement devient l'enregistrement courant du fichier. Dans le cas contraire, rien n'est modifié.
Les enregistrements sont déverrouillés par :
Mais si une transaction est en cours, les verrous ne seront levés qu'à la fin de la transaction.
Une instruction Readlock "réussie" implique l'attribution d'un verrou par le système. Cela empêche qu'une autre session modifie un enregistrement ou fasse un readlock sur ce même enrtegistrement. Il n'empêche nullement une autre session de lire cet enregistrement. Toute base de données utilise ses propres verrous et leur nombre maximum est un des paramètres de la base. (Pour SQL, ce nombre est au delà du milliard).
Les verrous n'étant levés qu'à la fin de la transaction, il est donc essentiel d'écrire des transactions les plus courtes possibles afin d'empêcher tout "blocage". En dehors d'une transaction, on utilisera Unlock dès que possible pour éviter ce problème.
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). |
FISLOCK(43) | Plusde verrous disponibles. |
UNLOCK - READ - FILE - LINK - REWRITE- LOOK - TRBEGIN - FSTAT - LOCKWAIT - UPDATE - FILTER - FOR
Adonix X3(r) L4G |