| |

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