Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Test de l'état de verrouillage d'une ressource

3 réponses
Avatar
Otra
Bonjour,

sous SQL 2000 je souhaiterai tester l'état de verrouillage d'un
enregistrement.
je m'explique :
un utilisateur ouvre un dossier, il est le premier, il peut le
modifier, on pose un verrou en mise à jour. dans l'intervalle, un autre
utilisateur ouvre ce même dossier. je souhaiterai tester l'état de
verrouillage afin de lui ouvrir le dossier en lui signalant qu'il est
en lecture seule et lui fournir les données originelles.
pour le premier utilisateur, je pose un verrou en mise à jour avec un
WITH(UPDLOCK) soit
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier

la transaction n'est fermée que lorsque le premier utilisateur ferme le
dossier, qu'il ait fait des modifs ou non.

quel test faire pour savoir qu'un UPDLOCK est posé sur le dossier afin
d'ouvrir en lecture seule pour le deuxième utilisateur ?

merci de votre aide.

3 réponses

Avatar
Otra
> Bonjour,

sous SQL 2000 je souhaiterai tester l'état de verrouillage d'un
enregistrement.
je m'explique :
un utilisateur ouvre un dossier, il est le premier, il peut le modifier, on
pose un verrou en mise à jour. dans l'intervalle, un autre utilisateur ouvre
ce même dossier. je souhaiterai tester l'état de verrouillage afin de lui
ouvrir le dossier en lui signalant qu'il est en lecture seule et lui fournir
les données originelles.
pour le premier utilisateur, je pose un verrou en mise à jour avec un
WITH(UPDLOCK) soit
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier

la transaction n'est fermée que lorsque le premier utilisateur ferme le
dossier, qu'il ait fait des modifs ou non.

quel test faire pour savoir qu'un UPDLOCK est posé sur le dossier afin
d'ouvrir en lecture seule pour le deuxième utilisateur ?

merci de votre aide.



retour :
A force de désespérance, on a fini par trouver (se contenter) de mettre
le LOCK_TIMEOUT à 0 avec un test sur l'erreur au niveau de la
transaction soit :
SET LOCK_TIMEOUT 0
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier
if @@ERROR=0
begin
traitement ok
end
else
begin
traitement verrou, lecture seule
ok
Avatar
zoltix
Otra a écrit :
Bonjour,

sous SQL 2000 je souhaiterai tester l'état de verrouillage d'un
enregistrement.
je m'explique :
un utilisateur ouvre un dossier, il est le premier, il peut le
modifier, on pose un verrou en mise à jour. dans l'intervalle, un
autre utilisateur ouvre ce même dossier. je souhaiterai tester l'état
de verrouillage afin de lui ouvrir le dossier en lui signalant qu'il
est en lecture seule et lui fournir les données originelles.
pour le premier utilisateur, je pose un verrou en mise à jour avec un
WITH(UPDLOCK) soit
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier

la transaction n'est fermée que lorsque le premier utilisateur ferme
le dossier, qu'il ait fait des modifs ou non.

quel test faire pour savoir qu'un UPDLOCK est posé sur le dossier afin
d'ouvrir en lecture seule pour le deuxième utilisateur ?

merci de votre aide.




retour :
A force de désespérance, on a fini par trouver (se contenter) de mettre
le LOCK_TIMEOUT à 0 avec un test sur l'erreur au niveau de la
transaction soit :
SET LOCK_TIMEOUT 0
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier
if @@ERROR=0
begin
traitement ok
end
else
begin
traitement verrou, lecture seule
ok




cooollll je note..........
Avatar
Christian Robert
Essayez avec WITH READPAST, il ne vous envoie que les enregistrements non
affectées par un verrou exclusif ou update...

--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration


"Otra" a écrit :

> Bonjour,
>
> sous SQL 2000 je souhaiterai tester l'état de verrouillage d'un
> enregistrement.
> je m'explique :
> un utilisateur ouvre un dossier, il est le premier, il peut le modifier, on
> pose un verrou en mise à jour. dans l'intervalle, un autre utilisateur ouvre
> ce même dossier. je souhaiterai tester l'état de verrouillage afin de lui
> ouvrir le dossier en lui signalant qu'il est en lecture seule et lui fournir
> les données originelles.
> pour le premier utilisateur, je pose un verrou en mise à jour avec un
> WITH(UPDLOCK) soit
> begin tran
> select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier
>
> la transaction n'est fermée que lorsque le premier utilisateur ferme le
> dossier, qu'il ait fait des modifs ou non.
>
> quel test faire pour savoir qu'un UPDLOCK est posé sur le dossier afin
> d'ouvrir en lecture seule pour le deuxième utilisateur ?
>
> merci de votre aide.

retour :
A force de désespérance, on a fini par trouver (se contenter) de mettre
le LOCK_TIMEOUT à 0 avec un test sur l'erreur au niveau de la
transaction soit :
SET LOCK_TIMEOUT 0
begin tran
select * from MATABLE WITH(UPDLOCK) where IDdossier = IDMonDossier
if @@ERROR=0
begin
traitement ok
end
else
begin
traitement verrou, lecture seule
ok