titre_site.jpg (51607 octets)

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

 ico_MsDos.jpg (1668 octets)  dbasedos.gif (376 octets) vdb5.gif (351 octets) Description

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.

- ico_MsDos.jpg (1668 octets) 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( ).

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

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

Code      ico_MsDos.jpg (1668 octets)   dbasedos.gif (376 octets)   vdb5.gif (351 octets)   Plus2_5-Icon.jpg (1250 octets)

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.