PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Erreur sur la fonction "HSUPPRIME"
Erreur sur la fonction "HSUPPRIME"
Débuté par Chambiges, 13 juil. 2018 09:09 - 7 réponses
Membre enregistré
86 messages
Popularité : +3 (3 votes)
Posté le 13 juillet 2018 - 09:09
Bonjour
Sur le fonction "Hsupprime" j'ai le message d'erreur suivant :
"L'enregistrement n°<18> se trouve en dehors du fichier <Dossiers>"
Hors l'enregistrement 18 existe bien dans le fichier "Dossiers"

HLitRecherche(Dossiers,IDDossiers,COL_IDDossier)
sFichier est une chaîne
nDossier est un entier
nDossier=COL_IDDossier
sFichier=COL_Chemin
sErreur est une chaîne
SI fRepSupprime(sFichier,frVersCorbeille) =Vrai ALORS
HChangeRep(Dossiers,gsCheminDossier)
HRecherche(Dossiers,IDDossiers,COL_IDDossier)
HSupprime(Dossiers,nDossier)
sErreur =ErreurInfo(errMessage)

Info("Dossier supprimer")
TableAffiche(TABLE_Dossiers,taDébut)
SINON

Info("Impossible de supprimer le dossier",sErreur)
FIN
CAS 3

RETOUR
FIN

D'avance merci pour votre éclairage
JCB

--
On a le droit de ne pas savoir, on n'a pas le droit de ne pas apprendre
Jean Claude Boulet
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 13 juillet 2018 - 09:24
Bonjour.
En extrait de la doc sur Hrecherche :
"Positionne sur le premier enregistrement du fichier de données dont la valeur d'une rubrique spécifique est supérieure ou égale à une valeur recherchée (recherche générique par défaut). L'enregistrement n'est pas lu. Pour lire l'enregistrement, utilisez la fonction HLitRecherche. "
-> donc à mon avis quand tu fais le Hsupprime l'enregistrement sur lequel tu pointes n'est pas le bon.

Michel.
PS: une petite remarque qui n'engage que moi -> Tu utilises Hlitrecherche -> recherche générique et non à l'identique. Ne vaut-il pas mieux utiliser HlitRecherchePremier ? (Je ne connais pas le but du traitement !)
Membre enregistré
165 messages
Popularité : +18 (20 votes)
Posté le 13 juillet 2018 - 09:45
Bonjour,

Je n'utilise jamais HRecherche mais à voir sa documentation, je vois qu'il faut passer explicitement HNumEnr aux appels suivants (notamment HSupprime, c'est d'ailleurs l'exemple de la page d'aide). HRecherche ne lit pas l'enregistrement
Or, dans votre code (de ce que j'en comprends),, vous passez à HSupprime l'identifiant de l'enregistrement et non le numéro d'enregistrement.

Pour simplifier la lecture et la compréhension, je vous conseille d'utiliser HLitRecherche au lieu de HRecherche puis d'appeler HSupprime sans autre paramètre que le nom du fichier.
Membre enregistré
86 messages
Popularité : +3 (3 votes)
Posté le 14 juillet 2018 - 09:21
Merci pour vos réponses qui mon mis sur la voix de la réflexion et voici mon code, si cela peut servir à d'autres.
SELON Dialogue("Voulez vous supprimer ce dossier ?")


CAS 1
TableSupprimeSelect(TABLE_Dossiers)

CAS 2
HLitRecherche(Dossiers,IDDossiers,COL_IDDossier)
sFichier est une chaîne
nDossier est un entier
nDossier=COL_IDDossier
sFichier=COL_Chemin
sErreur est une chaîne
HFerme("*")
SI fRepSupprime(sFichier,frVersCorbeille) =Vrai ALORS

sErreur =ErreurInfo(errMessage)
TableSupprimeSelect(TABLE_Dossiers)
Info("Dossier supprimer")
SINON
Info("Impossible de supprimer le dossier",sErreur)
FIN
CAS 3

RETOUR
FIN
TableAffiche(TABLE_Dossiers,taDébut)


--
On a le droit de ne pas savoir, on n'a pas le droit de ne pas apprendre
Jean Claude Boulet
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 16 juillet 2018 - 12:31
Bonjour.
J'ai du mal à appréhender l'extrait de code fourni.
Finalement tu utilises TableSupprimeSelect.
Mes remarques :
- je ne vois pas l'utilité du Hferme
- Personnelement : je préfère toujours utiliser un Hsupprime ou une requête delete et faire mon rafraîchissement de table après je trouve cela plus propre.
Michel.
Membre enregistré
86 messages
Popularité : +3 (3 votes)
Posté le 16 juillet 2018 - 17:39
Bonjour

Le HFerme permet de supprimer le dossier, car sinon des fichiers restent ouverts et suppression du dossier impossible.
Le TableSupprimeSelect est la solution de simplicité qui fonctionne bien.
Jean Claude

--
On a le droit de ne pas savoir, on n'a pas le droit de ne pas apprendre
Jean Claude Boulet
Posté le 16 juillet 2018 - 19:36
Bonjour,

Peut être en initialisant les variables en amont du HLitRecherche

CAS 2
sFichier est une chaîne = ""
nDossier est un entier = ""
nDossier=COL_IDDossier = ""
sFichier=COL_Chemin = ""
sErreur est une chaîne = ""
HLitRecherche(Dossiers,IDDossiers,COL_IDDossier)
...


Alain
Membre enregistré
86 messages
Popularité : +3 (3 votes)
Posté le 17 juillet 2018 - 12:24
Bonjour
Effectivement, les déclarations de variables après le HLitRecherche sont une erreur de coller
Mais la solution que j'ai posté le 14 Juillet fonctionne
Merci quand meme

--
On a le droit de ne pas savoir, on n'a pas le droit de ne pas apprendre
Jean Claude Boulet
Message modifié, 17 juillet 2018 - 12:27