PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Bloqué un enregistrement pour les autres utilisateurs d'une application
Bloqué un enregistrement pour les autres utilisateurs d'une application
Iniciado por ROMULUS001, 30,oct. 2019 15:14 - 9 respuestas
Miembro registrado
352 mensajes
Publicado el 30,octubre 2019 - 15:14
Bonjour,

Dans une application qui fait appel à des bases de données HFSQL C/S, j'aimerais qu'un enregistrement dans un fichier soit bloqué pour les autres utilisateurs du programme.
Mon code fonctionne de la manière suivante :

MaReqSQL est une chaîne="SELECT * FROM MaTable WHERE IDMaTable="+nID
Req est une Source dede Données

SI HExécuteRequêteSQL(REQ,hRequêteDéfaut,MaReqSQL) ALORS
HLitPremier(Req)
SI HTrouve() ALORS
//récupération des données
HBloqueNumEnr("MaTable")
FIN
FIN
HAnnuleDéclaration(Req)


Le soucis en faisant cela, j'ai une erreur quand je fais appel à HBloqueNumEnr, qui me dit qu'aucun enregistrement en cours n'est défini pour le fichier MaTable.

Une idée de comment s'y prendre?
Merci
Publicado el 30,octubre 2019 - 15:37
bonjour
il faut indiquer à la fonction HBloqueNumEnr() quel enregistrement elle va bloqué et le type de blocage, essayé HBloqueNumEnr("MaTable", hNumEnrEnCours, hBlocageLectureEcriture)
Miembro registrado
352 mensajes
Publicado el 30,octubre 2019 - 16:25
Bonjour, j'avais justement spécifié ces paramètres à HBloqueNumEnr mais le message d'erreur est le même que celui que j'ai obtenu, j'ai l'impression qu'il n'est pas possible de bloqué un enregistrement quand on fait appel à HExécuteRequêteSQL, il faudrait certainement passer par HExécuteRequête à la place
Miembro registrado
15 mensajes
Publicado el 30,octubre 2019 - 16:46
Bonjour,
Il faudrait indiquer quel numéro d'enregistrement bloquer !
Et pas en utilisant hNumEnrEnCours, vu que tu parcours ta requête, et pas ton fichier MaTable.
Publicado el 30,octubre 2019 - 16:53
ROMULUS001 avait énoncé :
Bonjour,

Dans une application qui fait appel à des bases de données HFSQL C/S,
j'aimerais qu'un enregistrement dans un fichier soit bloqué pour les autres
utilisateurs du programme.
Mon code fonctionne de la manière suivante :

MaReqSQL est une chaîne="SELECT * FROM MaTable WHERE IDMaTable="+nID
Req est une Source de Données

SI HExécuteRequêteSQL(REQ,hRequêteDéfaut,MaReqSQL) Alors
HLitPremier(Req)
SI HTrouve() Alors
//récupération des données
HBloqueNumEnr("MaTable")
FIN
FIN
HAnnuleDéclaration(Req)


Le soucis en faisant cela, j'ai une erreur quand je fais appel à
HBloqueNumEnr, qui me dit qu'aucun enregistrement en cours n'est défini pour
le fichier MaTable.

Une idée de comment s'y prendre?
Merci


normal une requête va récupérer les infos de l'enreg sans se soucier
d'être en phase avec le fichier (le poiteur de lecture du fichier n'est
pas aligné sur l'enreg)

faire pour HLSQL:
HLitRecherchePremier(MaTable, IDMaTable, nID, hBlocageLectureEcriture)

ou pour MySQL

MaReqSQL est une chaîne="SELECT * FROM MaTable WHERE IDMaTable="+nID+"
FOR UPDATE"

mais pour vous donner une réponse il faut savoir quel base vous
utilisez

--
Cordialement JeAn-PhI
Miembro registrado
352 mensajes
Publicado el 30,octubre 2019 - 16:56
je crois que le soucis avec HExécuteRequêteSQL, c'est qu'il est possible de faire des jointures entre tables, du coup, parler de numéro d'enregistrement n'a aucun sens pour une table donnée.
Comment peut-on connaitre le numéro d'un enregistrement, autrement qu'à l'aide de hNumEnrEnCours ?
Miembro registrado
15 mensajes
Publicado el 30,octubre 2019 - 17:21
Je suppose que si tu passes par une requête, c'est pour ne pas modifier ton pointeur sur le fichier MaTable.
Je ne vois pas comment connaitre le numéro d'enregistrement dans un fichier, sans bouger ce pointeur.
HRecherche te positionne sur le bon numéro d'enregistrement et donc modifie ce pointeur.
Miembro registrado
352 mensajes
Publicado el 30,octubre 2019 - 17:31
@JeAn-PhI : quand on fait appel à HLitPremier, on se positionne bien sur un enregistrement :
"Positionne sur le premier enregistrement d'un fichier de données en fonction d'une rubrique de parcours"
https://doc.pcsoft.fr/fr-FR/?3044051&name=HlitPremier

@Eric : pas grave, je crois que le mieux serait de procéder autrement, par exemple, en ajoutant une nouvelle colonne et y mettre quel utilisateur a pris tel enregistrement, j'ai bien peur que je n'ai que ça comme solution, en tout cas, dans le contexte où je me trouve
Publicado el 30,octubre 2019 - 17:39
ROMULUS001 a formulé ce mercredi :
je crois que le soucis avec HExécuteRequêteSQL, c'est qu'il est possible de
faire des jointures entre tables, du coup, parler de numéro d'enregistrement
n'a aucun sens pour une table donnée.
Comment peut-on connaitre le numéro d'un enregistrement, autrement qu'à
l'aide de hNumEnrEnCours ?


le n° d'enreg n'a pas d'existence en dehors de HF donc si vous pouvez
nous dire quel type de base vous utilisez pour commencer cela ne rendra
les réponses que meilleures

--
Cordialement JeAn-PhI
Publicado el 30,octubre 2019 - 17:41
Il se trouve que ROMULUS001 a formulé :
@JeAn-PhI : quand on fait appel à HLitPremier, on se positionne bien sur un
enregistrement :
"Positionne sur le premier enregistrement d'un fichier de données en fonction
d'une rubrique de parcours"
https://doc.pcsoft.fr/fr-FR/?3044051&name=HlitPremier

@Eric : pas grave, je crois que le mieux serait de procéder autrement, par
exemple, en ajoutant une nouvelle colonne et y mettre quel utilisateur a pris
tel enregistrement, j'ai bien peur que je n'ai que ça comme solution, en tout
cas, dans le contexte où je me trouve


oui pour HLitPremier() sauf que je n'en ai pas parlé j'ai indiqué
HLitRecherchePremier() avec option de blocage

--
Cordialement JeAn-PhI