titre_site.jpg (51607 octets)

FLOCK()

Commande dBase IV et suivants

Verrouille la table (File Lock) en cours ou la table de l'alias spécifié, et renvoie la valeur logique .T. en cas de succès.

Syntaxe

FLOCK([<alias>])

<alias>

Un numéro de zone de travail (1 à 225), une lettre de zone de travail (A à J) ou le nom d'alias. La lettre de zone de travail ou le nom d'alias doit être entouré de guillemets. Si vous n'incluez pas <alias>, FLOCK( ) verrouille la table en cours.

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

Utilisez FLOCK( ) pour verrouiller la table en cours ou la table spécifiée pas son alias, empêchant ainsi les autres utilisateurs d'utiliser la table.
Lorsque vous verrouillez une table avec FLOCK( ), vous seul pouvez la modifier. Cependant, à l'inverse de USE...EXCLUSIVE et SET EXCLUSIVE ON, FLOCK( ) permet à d'autres utilisateurs de visualiser la table verrouillée lorsque vous l'utilisez. Si vous verrouillez une table avec FLOCK( ), elle reste verrouillée jusqu'à l'émission de UNLOCK ou la fermeture de la table.

FLOCK( ) est similaire à RLOCK( ), excepté que FLOCK( ) verrouille une table entière, tandis que RLOCK( ) vous permet de verrouiller des enregistrements spécifiques d'une table. Utilisez FLOCK( ), lorsque vous voulez être le seul à accéder à une table entière ou à un ensemble de tables en relation (par exemple, lorsque vous voulez mettre à jour plusieurs tables reliées par une clé commune).
Toutes les commandes qui modifient les données d'une table provoquent de la part de dBASE une tentative d'exécution de verrouillage automatique de fichier ou d'enregistrement. dBASE renvoie une erreur s'il ne réussit pas à exécuter un verrouillage automatique de fichier ou d'enregistrement. Vous pouvez utiliser FLOCK( ) pour intercepter des événements et tester la valeur renvoyée au lieu d'une condition d'erreur.

FLOCK( ) peut verrouiller une table partagée même si un autre utilisateur du réseau visualise des données contenues dans la table. FLOCK( ) échoue uniquement si un autre utilisateur a verrouillé explicitement la table ou un enregistrement de la table, ou utilise une commande qui verrouille automatiquement la table ou un enregistrement de la table.
Lorsque SET REPROCESS est mis à 0 (valeur par défaut) et que FLOCK( ) ne peut verrouiller immédiatement une table, dBASE vous propose d'effectuer une nouvelle tentative de verrouillage ou d'annuler la fonction. Tant que vous ne choisissez pas d'annuler la fonction, FLOCK( ) essaie sans cesse de verrouiller la table. Utilisez SET REPROCESS pour supprimer le message d'annulation de la fonction FLOCK( ) ou pour définir le nombre de nouvelles tentatives de verrouillage. Si FLOCK( ) renvoie la valeur logique .F., vous pouvez relancer FLOCK( ).

Lorsque vous établissez une relation à une table parent avec SET RELATION, puis verrouillez la table avec FLOCK( ), dBASE tente de verrouiller toutes les tables enfants. Pour plus d'informations sur la mise en relation de tables, voir SET RELATION.

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 cet exemple, une boucle se déroule tant qu'elle ne peut pas verrouiller le fichier avec FLOCK( ) ou jusqu'à ce que l'utilisateur décide d'arrêter :

RecordWasRead=.f.
Again=.t.
SET REPROCESS TO 10
USE SOCIETE SHARED     && ouverture non exclusive
DO WHILE Again
IF FLOCK( )            && dBASE peut-il verrouiller le fichier ?
  DO Compmod           && Oui: mise à jour de SOCIETE.DBF
  RecordWasRead=.t.
  Again=.f.
  UNLOCK               && Permet à d'autres utilisateurs de
                       && modifier le fichier.
ELSE                    && FLOCK( ) renvoie .F.
   CLEAR
   ? "Impossible de verrouiller le fichier SOCIETE."
   Wait "Nouvelle tentative? " TO Ans
   IF UPPER(Ans)="O"
      Again = .t.
   ELSE
      Again = .f.
   ENDIF
ENDIF
ENDDO
USE
SET REPROCESS TO 0      && Valeur par défaut

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.