Page 1 sur 1
Comment savoir qu'un document est ouvert
Posté:
Mar 10 Sep 2013 09:21
de atagleike
Bonjour,
Je voudrais savoir, par l'utilisation des objets métier, si un document de vente est ouvert (en cours de modification ou de consultation) ou pas. J'ai essayé diverses méthodes, mais rien de vraiment efficace.
Quelqu'un a une idée ?
Merci
Hervé
Re: Comment savoir qu'un document est ouvert
Posté:
Dim 6 Oct 2013 14:32
de nizarbraham
Essaye ce code qui affiche tous les documents bloqués
- Code: Tout sélectionner
SET NOCOUNT ON
DECLARE @DO_PIECE varchar(9)
DECLARE @DO_TYPE smallint
DECLARE @DO_DOMAINE smallint
DECLARE @DO_cbMarq int
DECLARE @DO_Dure_Contrat numeric
DECLARE @DO_majorachat numeric
DECLARE @lock int
DECLARE MyCursor CURSOR FOR
SELECT DO_PIECE,DO_TYPE,DO_DOMAINE,cbMarq FROM F_DOCENTETE
ORDER BY cbMarq
OPEN MyCursor -- j'initialise mon curseur
-- je le rempli avec la première ligne retournée par la requête
FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq
-- Tant que je n'ai pas traité tous les enregistrements de le requête
WHILE @@FETCH_STATUS = 0
BEGIN
exec CB_IsRecordLock 'F_DOCENTETE', @DO_cbMarq, @lock OUTPUT --Test si l'enregistrement est locké
IF @lock > 0 print @DO_PIECE
FETCH NEXT FROM MyCursor INTO @DO_PIECE, @DO_TYPE, @DO_DOMAINE, @DO_cbMarq
END
CLOSE myCursor -- je ferme mon curseur
DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur
Salutations
Re: Comment savoir qu'un document est ouvert
Posté:
Mar 5 Nov 2013 15:31
de Tim
il y a la méthode CouldModified qui permet de vérifier si un document est verrouillé et si ce n'est pas le cas ça le verrouille.
ensuite les méthodes read, write ou writedefault déverrouillent
Re: Comment savoir qu'un document est ouvert
Posté:
Jeu 28 Nov 2013 12:33
de DaliPieo
Bonjour à tous,
@Tim: avez vous un code à tester pour le dévérouillage..c'est intéressent!
Cordialement
Re: Comment savoir qu'un document est ouvert
Posté:
Mer 4 Déc 2013 19:45
de nizarbraham
Essaye ce code dont j'ai oublié l'origine
- Code: Tout sélectionner
USE ma_base
DECLARE @LOCK int
DECLARE @lBase int
DECLARE @lTable int
DECLARE @lRes int
DECLARE @ress int
DECLARE @spid int
DECLARE @sp int
DECLARE MyCursor CURSOR FOR
SELECT cbMarq FROM F_DOCENTETE where DO_Piece='d3004428' -- BCXXX = NUMERO DE PIECE (numero du document)
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ress
set @spid = 0
WHILE @spid < 200 -- on considère que 200 est un gros chiffre mais vous pouvez le mettre plus haut
BEGIN
set @spid=@spid+1
SET NOCOUNT ON
SELECT @lBase = DB_ID()
SELECT @lTable = OBJECT_ID('F_DOCENTETE')
EXECUTE @lRes = master..xp_CBUnLockRecord @spid,@lBase,@lTable, 3,@ress -- essaye de débloquer le document du processus
IF @lRes <> 0
RAISERROR(@lRes,11,1) WITH SETERROR
exec CB_IsRecordLock 'F_DOCENTETE', @ress, @LOCK OUTPUT -- test si le document est toujours bloqué
print @LOCK -- renvoi 1 si bloqué et 0 pour debloqué
print @spid
END
CLOSE myCursor
DEALLOCATE myCursor
Salut
Re: Comment savoir qu'un document est ouvert
Posté:
Lun 3 Mar 2014 12:25
de Tim
Désolé ça faisait un moment que je n'étais pas venu sur le forum.
le test est tout simple :
try
monDoc.CouldModified
mondoc.read
catch ex as exception
msgbox ("Doc ouvert")
end try
Re: Comment savoir qu'un document est ouvert
Posté:
Mer 30 Sep 2015 15:49
de gremlins13
Merci à tous,
Je réponds très très très très très tard, J'ai pris en compte toutes vos propositions, et finalement j'ai opté pour une solution très simple mais qui satisfait à ce que demande mon programme : c'est à dire je tente un simple update sur le document (par exemple 'UPDATE F_DOCENTETE SET DO_STATUT=DO_STATUT WHERE DO_PIECE='BCXXXXX') encapsulé dans un try except. Si j'ai une exception, j'en déduis que le document est ouvert quelque part, à condition, bien sur, que le document existe, mais ça , c'est une autre requête.
Re: Comment savoir qu'un document est ouvert
Posté:
Jeu 1 Oct 2015 14:24
de romulus001
La fonction dbo.CB_FntIsRecordLock permet de faire cela, si elle renvoie 0, le document n'est pas ouvert, 1 sinon.
1er paramètre en entrée : le nom de ta table où tu veux faire ton test (exemple: F_DOCENTETE)
2eme paramètre en entrée : la valeur du cbmarq de ta table concernée