PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Champs table mémoire (par programmation) enregistrement des données modifiées
Champs table mémoire (par programmation) enregistrement des données modifiées
Iniciado por JVE, 23,ene. 2020 11:17 - 3 respuestas
Miembro registrado
48 mensajes
Publicado el 23,enero 2020 - 11:17
Bonjour

Je rempli un champs table à l'aide d'une requête en validant sur un bouton (l'utilisateur à la possibilité de faire une recherches sur plusieurs parametre) :
SI HExécuteRequête(REQ_CoutMAJ)=Vrai ET HNbEnr(REQ_CoutMAJ)>0 ALORS
POUR TOUT REQ_CoutMAJ
TableAjouteLigne(TABLE_CoutMAJ, REQ_CoutMAJ.NumSection,REQ_CoutMAJ.NumItem,REQ_CoutMAJ.NumNAF,REQ_CoutMAJ.SectionCout,REQ_CoutMAJ.CoutBudget,REQ_CoutMAJ.CoutEngage,REQ_CoutMAJ.CoutRealise,REQ_CoutMAJ.CoutRestant,REQ_CoutMAJ.DateModif)
FIN
SINON
Info("Pas de Données ou N° Projet à saisir")
FIN

Ensuite l'utilisateur a la possibilité de modifier les valeurs dans une colonne en validant sur un bouton.
j est un entier =0
SI OuiNon("Voulez enregistrer les données saisies?") ALORS

POUR i=1 À TableOccurrence(TABLE_CoutMAJ)
HLitRecherchePremier(INDICATEUR_BUDGET,NumNAF,TABLE_CoutMAJ.COL_NumNAF[i])
HLitRecherchePremier(INDICATEUR_BUDGET,DateModif,TABLE_CoutMAJ.COL_DateModif[i])
SI TABLE_CoutMAJ.COL_CoutRestant[i]<>INDICATEUR_BUDGET.CoutRestant ALORS
INDICATEUR_BUDGET.CoutRestant=TABLE_CoutMAJ.COL_CoutRestant[i]
j+=1
FIN

FIN
Info("Mise à jour terminée.",j+" valeurs ont été traitées sur les "+TableOccurrence(TABLE_CoutMAJ)+" lignes du tableau.")

SINON
RETOUR
FIN

Je n'arrive pas à trouver ce qui coince. Les enregistrements ne sont pas mis à jour dans le fichier de la BDD.

Merci pour votre aide.
Miembro registrado
491 mensajes
Publicado el 23,enero 2020 - 11:24
Bonjour

Ne vous manque t'il pas un ecranversfichier et Henregistre ?

Cordialement

DG
Miembro registrado
4.362 mensajes
Publicado el 23,enero 2020 - 11:31
Bonjour,
Dans un premier temps, tu fais 2 recherches consécutives sur ta table INDICATEUR_BUDGET la première est écrasée par la 2°, si tu veux faire une recherche sur 2 critères il faut soit passer par une requête, soit passer par une clé composée.

Que fait tu si ton HLitRecherchePremier ne renvoie rien ou lève une erreur ?
HLitRecherchePremier recherche le premier enregistrement remplissant la condition, que faire s'il y en a plusieurs ? L'enregistrement concerné est peut être dans les enregistrement suivant ?
Je n'ai pas regardé la suite du code, mais c'est déjà bloquant.

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 23,enero 2020 - 11:41
Miembro registrado
48 mensajes
Publicado el 31,enero 2020 - 14:14
Bonjour
Merci.
J'ai corrigé la double recherche en rajoutant dans la table (remplie par requête l'identifiant unique du fichier) et le fait que le HLitRecherchePremier ne renvoie qu'un seul enregistrement. Et rajouter le HEnregistre
j est un entier =0
SI OuiNon("Voulez enregistrer les données saisies?") ALORS

POUR i=1 À TableOccurrence(TABLE_CoutMAJ)
HLitRecherchePremier(INDICATEUR_BUDGET,IDINDICATEUR_BUDGET,TABLE_CoutMAJ.COL_ID[i])
SI TABLE_CoutMAJ.COL_CoutRestant[i]<>INDICATEUR_BUDGET.CoutRestant ALORS
INDICATEUR_BUDGET.CoutRestant=TABLE_CoutMAJ.COL_CoutRestant[i]
j+=1
HEnregistre(INDICATEUR_BUDGET)
FIN

FIN
Info("Mise à jour terminée.",j+" valeurs ont été traitées sur les "+TableOccurrence(TABLE_CoutMAJ)+" lignes du tableau.")

SINON
RETOUR
FIN