PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Problème avec HMODIFIE()
Problème avec HMODIFIE()
Débuté par Jean TURCOTTE, 21 juin 2019 18:48 - 5 réponses
Membre enregistré
1 120 messages
Popularité : +8 (8 votes)
Posté le 21 juin 2019 - 18:48
Bonjour, j'éprouve des difficultés avec la commande HMODIFIE et je ne sais vraiment pas pourquoi, c'est super simple et ca devrait fonctionner. Lorsque j'execute le programe pas à pas, les données avec HAJOUTE() fonctionnent mais celles avec HMODIFIE ne modifie pas dans la BD. Toutes les données à être écrites dans la base sont OK et je n'ai aucune erreur avec la BD.

DateDébutAgenda est Date = AgendaPosition(AGD_Disponibilité)
DateFinAgenda est Date = DateDébutAgenda + 6j
Date_A_Évaluer est une Date

SI HExécuteRequête(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ, hRequêteDéfaut,sNoEmployé,DateDébutAgenda,DateFinAgenda)=Vrai ALORS
POUR TOUT REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ
Date_A_Évaluer = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.DateAbsolue
SI REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée <> 0 ALORS

Contact_NBR_HeureDispo_Par_Jour.DateDispo = Date_A_Évaluer
Contact_NBR_HeureDispo_Par_Jour.NoEmploye = sNoEmployé
Contact_NBR_HeureDispo_Par_Jour.TotalHeuresDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée
SI HLitRecherche(Contact_NBR_HeureDispo_Par_Jour, DateDispo, Date_A_Évaluer) = Vrai ALORS
HModifie(Contact_NBR_HeureDispo_Par_Jour)
SINON
HAjoute(Contact_NBR_HeureDispo_Par_Jour)
FIN
FIN
FIN
FIN
HLibèreRequête(Contact_NBR_HeureDispo_Par_Jour)


--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Message modifié, 21 juin 2019 - 18:49
Membre enregistré
1 120 messages
Popularité : +8 (8 votes)
Posté le 21 juin 2019 - 20:03
J'ai finalement trouvé la solution en changeant la position de mon HLitRecherche, il semble que c'était lui qui causait mon erreur. Voici le code fonctionnel;

DateDébutAgenda est Date = AgendaPosition(AGD_Disponibilité)
DateFinAgenda est Date = DateDébutAgenda + 6j
Date_A_Évaluer est une Date
bTest est un booléen
nNBRJOUR est un entier

SI HExécuteRequête(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ, hRequêteDéfaut,sNoEmployé,DateDébutAgenda,DateFinAgenda)=Vrai ALORS
nNBRJOUR = HNbEnr(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ)

POUR TOUT REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ
Date_A_Évaluer = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.DateAbsolue
SI REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée <> 0 ALORS
SI HLitRecherche(CONTACT_NBR_HeureDispo_Par_Jour, DateDispo, Date_A_Évaluer) = Vrai ALORS
CONTACT_NBR_HeureDispo_Par_Jour.ID_DISPONIBILITE = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.ID_DISPONIBILITE
CONTACT_NBR_HeureDispo_Par_Jour.DateDispo = Date_A_Évaluer
CONTACT_NBR_HeureDispo_Par_Jour.NoEmploye = sNoEmployé
CONTACT_NBR_HeureDispo_Par_Jour.TotalHeuresDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée
bTest = HModifie(CONTACT_NBR_HeureDispo_Par_Jour)
SINON
CONTACT_NBR_HeureDispo_Par_Jour.ID_DISPONIBILITE = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.ID_DISPONIBILITE
CONTACT_NBR_HeureDispo_Par_Jour.DateDispo = Date_A_Évaluer
CONTACT_NBR_HeureDispo_Par_Jour.NoEmploye = sNoEmployé
CONTACT_NBR_HeureDispo_Par_Jour.TotalHeuresDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée
bTest = HAjoute(CONTACT_NBR_HeureDispo_Par_Jour)
FIN
FIN
FIN
FIN


--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
3 881 messages
Popularité : +227 (347 votes)
Posté le 21 juin 2019 - 22:21
Bonjour,
SI HLitRecherche(Contact_NBR_HeureDispo_Par_Jour, DateDispo, Date_A_Évaluer) = Vrai ALORS
HModifie(Contact_NBR_HeureDispo_Par_Jour)
SINON
[HAjoute(Contact_NBR_HeureDispo_Par_Jour)
FIN

pourrait avantageusement être remplacé par :
HEnregistre(Contact_NBR_HeureDispo_Par_Jour)


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
46 messages
Popularité : -1 (9 votes)
Posté le 21 juin 2019 - 23:10
Bonjour,
En enlevant les redondances, votre code deviendrait

SI HExécuteRequête(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ, hRequêteDéfaut,sNoEmployé,DateDébutAgenda,DateFinAgenda)=Vrai
nNBRJOUR = HNbEnr(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ)

POUR TOUT REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ
Date_A_Évaluer = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.DateAbsolue
SI REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée <> 0 ALORS
HLitRecherche(CONTACT_NBR_HeureDispo_Par_Jour, DateDispo, Date_A_Évaluer)
CONTACT_NBR_HeureDispo_Par_Jour.ID_DISPONIBILITE = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.ID_DISPONIBILITE
CONTACT_NBR_HeureDispo_Par_Jour.DateDispo = Date_A_Évaluer
CONTACT_NBR_HeureDispo_Par_Jour.NoEmploye = sNoEmployé
CONTACT_NBR_HeureDispo_Par_Jour.TotalHeuresDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée

SI HTrouve() ALORS
bTest = HModifie(CONTACT_NBR_HeureDispo_Par_Jour)
SINON
bTest = HAjoute(CONTACT_NBR_HeureDispo_Par_Jour)
FIN
FIN
FIN
FIN
Message modifié, 21 juin 2019 - 23:17
Membre enregistré
2 571 messages
Popularité : +222 (260 votes)
Posté le 22 juin 2019 - 10:15
Bonjour,

Il manque un "hidentique" au HLitRecherche(), ce qui peut renvoyer des enregistrements non désirés (recherche générique).

D'autre part, voici le code que j'aurais mis personnellement, qui est plus concis et facile à lire.
SI HExécuteRequête(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ, hRequêteDéfaut,sNoEmployé,DateDébutAgenda,DateFinAgenda)=Vrai ALORS
nNBRJOUR = HNbEnr(REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ)

POUR TOUT REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ
SI REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée <> 0 ALORS
SI PAS HLitRecherche(CONTACT_NBR_HeureDispo_Par_Jour, DateDispo, REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.DateAbsolue, hIdentique) ALORS
HRAZ(CONTACT_NBR_HeureDispo_Par_Jour)
FIN
CONTACT_NBR_HeureDispo_Par_Jour.ID_DISPONIBILITE = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.ID_DISPONIBILITE
CONTACT_NBR_HeureDispo_Par_Jour.DateDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.DateAbsolue
CONTACT_NBR_HeureDispo_Par_Jour.NoEmploye = sNoEmployé
CONTACT_NBR_HeureDispo_Par_Jour.TotalHeuresDispo = REQ_TOT_HEURE_DISPO_PAR_EMPLOYÉ.la_somme_Durée
bTest = HEnregistre(CONTACT_NBR_HeureDispo_Par_Jour)
FIN
FIN
FIN


--
Cordialement,

Philippe SAINT-BERTIN
Message modifié, 22 juin 2019 - 10:17
Membre enregistré
1 120 messages
Popularité : +8 (8 votes)
Posté le 22 juin 2019 - 12:45
Je m'étonne à chaque jour de constater la quantité de méthodes et de façon de coder un programme.
Merci à tous pour votre aide, j'applique ça tout de suite...:)

--
Jean Turcotte
WX 24
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram