PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → incompréhension sur hmodifie et hsupprime
incompréhension sur hmodifie et hsupprime
Débuté par LION, 24 juin 2014 23:56 - 4 réponses
Posté le 24 juin 2014 - 23:56
Bonjour,

J'exécute une requête SQL sur plusieurs fichier HF. Cette requête me sert de table temporaire.
Je fais ensuite le traitement simple suivant :
Hlitpremier(ma_requete, "ma_cle_parcours,hsansrafraichir)
TANTQUE PAS HEnDehors(ma_requete)
si .... ma_condition alors
h(modifie)
fin
si ... mon autre condition alos
h(supprime)

hlitsuivant(ma_requete,"ma_cle_parcours")

Et bien pas d'erreur mais en fait le hsupprime n'a pas fonctionné ????
Je le constate en lisant la requête avant et après le traitement -> les enregistrements supprimés ne le sont pas.
Aucune erreur !

Je suis en fait obligé de faire une seconde passe
Pout tout ma_requete
si mon autre condition alors
hsupprime

fin

Je ne comprends pas pourquoi il faut faire 2 lectures pour faire une suppression ou une modification.
PS : je n'utilise pas ma requête pour faire des modifcation ou suppression dans des fichiers HF, je m'en sert comme fichier temporaire c'est tout....
Membre enregistré
1 936 messages
Popularité : +53 (65 votes)
Posté le 25 juin 2014 - 07:29
Bonjour,

un peu court h(supprime)...
Quel est le code ? hSupprime (ma_requete) ou hSupprime(mon_fichier) ?

--
Bon dev.
Jean-Pierre
Membre enregistré
1 936 messages
Popularité : +53 (65 votes)
Posté le 25 juin 2014 - 07:36
Re-bonjour,

Infos complémentaires extraites de l'aide en ligne :

Suppression d'un enregistrement à partir d'une requête
La suppression d'un enregistrement dans une requête peut être effectuée :
• soit uniquement dans le résultat de la requête
• soit directement dans les fichiers de données manipulés par la requête (constante hModifieFichier utilisée dans les fonctions HExécuteRequête ou HExécuteRequêteSQL). Dans ce cas, la constante hAvecFiltre est automatiquement sélectionnée.

Quel que soit le mode d'exécution de la requête (avec ou sans la constante hAvecFiltre), la fonction HSupprime n'est utilisable que sur les requêtes mono-fichier.

Attention :
• Il est impossible de supprimer un enregistrement dans une requête utilisant les groupes ou les agrégats.

--
Bon dev.
Jean-Pierre
Posté le 25 juin 2014 - 11:30
Bonjour,

Regarde l'aide de la fonction Hsupprime ou Hajoute.

La syntaxe normale de la fonction Hsupprime, c'est :

bool = Hsupprime(... ... )
si bool = faux alors
erreur ( HerreurInfo() )
Fin


Tu as choisi de ne pas tester le code retour de la fonction Hsupprime(), et de ne pas afficher le message donné par HerreurInfo() ... et tu te demandes pourquoi ça ne marche pas ?

Applique la syntaxe complète, teste le code retour, et tu auras toutes les réponses à tes questions.
Ou au moins, tu auras essayé.
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 26 juin 2014 - 16:36
Bonjour,

réponse à Jean-Pierre : je fais une requête multi fichiers et manipule cette requête (fichier temporaire). Je fais mon hsupprime(ma_requete) que sur la requête. Je n'utilise pas la constante Hmodifie(fichier). Logiquement je ne supprime que le contenu des données la requête, je me moque des données de la base.

Réponse à Joël : je ne l'ai pas mis dans mon post mais j'ai tracé le hsupprime ... tout se passe bien sans aucune erreur ! C'est après en relisant la requête que je me rends compte que les enregistrements sont encore là. Un deuxième passage pour supprimer puis une relecture confirma alors la suppression. C'est là le problème : le Hsupprime ne retourne aucune erreur -> donc logiquement enregistement supprimé mais en fait rien n'est fait.
J'ai une idée derrière la tête que me dit que le parcours de la requête sur une clé de parcours avec un hsupprime ne fonctionne pas. Par contre le parcours de la requête sans clé de parcours permet la suppression !

Michel.