
RLOCK()
Commande dBase IV et suivants
Verrouille l'enregistrement (Record Lock)
en cours ou la liste des enregistrements spécifiés dans la table en cours ou dans la
table spécifiée, et renvoie la valeur .T. si l'opération réussit.
Syntaxe
RLOCK([<liste expC>] | [<liste de signets>] [, <alias>])
<liste expC>
La liste des numéros des enregistrements à verrouiller, séparés par des virgules.
<liste de signets> Non
supporté dans dBase IV
La liste des signets (indicateurs d'enregistrements) renvoyés par BOOKMARK( ) et
repérant les enregistrements d'une table ne disposant pas de numéros d'enregistrements,
telle qu'une table Paradox. Vous devez séparer les signets par des virgules.
[,] <alias>
Un numéro de zone de travail (1 à 255), une lettre de zone de travail (A à J) ou un nom
d'alias. La lettre de zone de travail ou le nom d'alias doit être entouré de guillemets.
Si <alias> est omis, RLOCK( ) s'applique à la table en cours.
Il n'est pas nécessaire de spécifier les numéros d'enregistrements ou les signets si
vous spécifiez une valeur pour <alias>. Toutefois, si des numéros
d'enregistrements ou des signets ont été indiqués, vous devez précéder <alias>
d'une virgule (,).
Utilisez RLOCK( ) pour verrrouiller l'enregistrement en cours ou une
liste d'enregistrements dans la table en cours ou dans la table alias. Si aucun argument
n'est transmis à RLOCK( ), l'enregistrement en cours de la table en cours est
verrouillé. Si <alias> est le seul argument transmis à RLOCK( ),
l'enregistrement en cours de la table alias est verrouillé. Si le verrouillage opéré
par RLOCK( ) sur tous les enregistrements indiqués réussit, la valeur .T. est
renvoyée. RLOCK( ) permet de verrouiller jusqu'à 100 enregistrements dans chaque
table ouverte depuis votre station de travail.
Vous pouvez visualiser et mettre à jour un enregistrement verrouillé avec RLOCK( ).
Les autres utilisateurs pouront visualiser cet enregistrement mais ne pourront effectuer
sa mise à jour. Lorsque vous verrouillez un enregistrement avec RLOCK( ), il demeure
verrouillé jusqu'à ce que se produise l'un des événements suivants :
- La commande UNLOCK est exécutée.
- La table est fermée.
-
La touche Ctrl+O (la commande en bascule utilisée pour verrouiller/déverrouiller un
enregistrement) dans une fenêtre tabulaire ou la fenêtre d'édition est enfoncée alors
que le pointeur d'enregistrement se trouve sur un enregistrement qui a été verrouillé
avec RLOCK( ).
RLOCK( ) est semblable à FLOCK( ) sauf que cette dernière fonction verrouille
une table entière. N'utilisez FLOCK( ) que si vous êtes certain d'être le seul
utilisateur à accéder à l'ensemble d'une table et à ses tables liées (par exemple,
dans le cas où vous devez mettre à jour plusieurs tables liées entre elles par une clé
commune) ou lorsque vous souhaitez mettre à jour plus de 100 enregistrements à la fois.
Toutes les commandes modifiant les données d'une table provoquent automatiquement une
tentative pour verrouiller les enregistrements ou la table. Si dBASE échoue dans cette
tentative, une erreur est renvoyée. Vous pouvez utiliser la fonction RLOCK( ) pour
intercepter l'événement en vérifiant la valeur renvoyée plutôt que d'évaluer une
condition d'erreur.
RLOCK( ) ne peut verrouiller les enregistrements indiqués si l'une des conditions
suivantes est vraie :
- Un autre utilisateur verrouille de façon explicite ou automatique l'enregistrement en
cours ou l'un des enregistrements définis par <liste expC> ou <liste de
signets>.
- Un autre utilisateur verrouille de façon explicite ou automatique la table en cours ou
la table alias indiquée.
Lorsque RLOCK( ) n'est pas en mesure de verrouiller immédiatement
les enregistrements indiqués, un message s'affiche vous demandant si vous voulez tenter
une nouvelle fois le verrouillage des enregistrements ou si vous voulez annuler
l'opération. Utilisez SET REPROCESS pour indiquer le nombre de tentatives. Si vous
choisissez l'annulation, RLOCK( ) renvoie la valeur .F.
Si une relation avec une table parent est établie par SET RELATION et si un
enregistrement de la table est ensuite verrouillé avec RLOCK( ), dBASE tente de
verrouiller tous les enregistrements enfants des tables enfants. Pour plus d'informations
sur la mise en relation des tables, voir SET RELATION.
RLOCK( ) est équivalent à LOCK( ).
Verrouiller des lignes et des tables peut être fait en XBase utilisant la
fonction FLOCK() (File Lock - verrouillage de la table), ou les fonctions LOCK()/RLOCK()
(verrouiller un enregistrement ou verrouiller les enregistrement indiqués dans la table).
Les équivalents OODML sont dans l'objet ensemble de lignes, et sont appelés lockSet() et
lockRow (). Ces méthodes, cependant, ne sont normalement pas nécessaires. Le
verrouillage est normalement automatique, et ces méthodes sont rarement vraiment
nécessaires. Dans la plupart des cas, vous ne devriez verrouiller une table ou un jeu de
lignes que pour la durée d'une action spécifique (comme l'édition d'un enregistrement,
ou la compression (PACK) d'une table). Dans ces cas, vous n'avez pas besoin d'utiliser ces
méthodes - dBASE gérera les verrous pour vous.
Toutefois, si vous avez quelques scénario où vous avez besoin de verrouiller une table
ou un enregistrement plus qu'un court laps de temps, vous pouvez utiliser ces méthodes
...
Dans l'exemple suivant, une boucle s'exécute jusqu'à ce que le 10ème
enregistrement soit verrouillé avec RLOCK( ) et se poursuit tant que l'utilisateur
ne décide pas d'annuler la tentative de verrouillage. Si l'opération réussit, le
sous-programme CompMod est appelé pour mettre à jour l'enregistrement :
RecordWasRead = .t.
SET REPROCESS TO 20 && Tenter 20 fois le verrouillage
USE SOCIETE
GO 10
Again = .t.
DO WHILE Again
IF RLOCK( ) && Le
fichier peut-il être verrouillé ?
DO CompMod &&
Mettre à jour cet enregistrement
Again = .f.
UNLOCK
&& Autoriser la modification du fichier par
&& les autres utilisateurs.
ELSE && RLOCK( ) renvoie .F.
CLEAR
Wait "Le verrouillage a échoué. Réessayer ? (O/N)
";
to mRetry
IF UPPER(mRetry)="N"
Again = .f.
ENDIF
RecordWasRead = .f.
ENDIF
ENDDO |
retour
Sources :
Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm par Ken Mayer
Aide dBase Plus 2.6.0
Retour à l'accueil
Les informations de cette page sont données à titre indicatif et ne se substituent
pas à celles contenues dans l'Aide de votre version de dBase qui reste la meilleure
documentation.
Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Dernière modification : mercredi 11 août 2010
© M.Abraham.
|