PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → HModifie ne fonctionne pas...
HModifie ne fonctionne pas...
Débuté par Fred, 30 avr. 2016 12:01 - 13 réponses
Posté le 30 avril 2016 - 12:01
Bonjour
je cherche à modifier des données d'un fichier mais je n'y arrive pas. Je modifie bien, sans erreur, mes données quand je passe sur ma fonction mais quand je rappelle mes données je vois que la modif n'est pas pris en compte!

voici la partie de mon code où je bloque:
POUR nIdTeam=1 A 4
HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
SI HTrouve(TableauExcel)=Vrai ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,1] + RC + tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]
HModifie(TableauExcel)
FIN

FIN


et quand je fais ce code je vois que ma modif n'est pas pris en compte
HLitRecherchePremier(TableauExcel,Nom,sTech)


je n'arrive pas à trouver mon erreur! ;( Avez vous une idée de ma boulette et si vous pouvez me l'expliquer c'est le top!?
un grand merci d'avance
Membre enregistré
96 messages
Popularité : +6 (6 votes)
Posté le 02 mai 2016 - 09:41
Bonjour,

J'ai comme l'impression que tu mélanges les données d'un tableau dynamique avec les données d'un fichier HF.
En plus l'indice de la boucle (?) n'est pas utilisé. Tu fais quatre recherche idem pour rien ??!!

Ou alors je ne comprend rien...
...

--
___m__(°u°)__m___
Posté le 03 mai 2016 - 21:37
Fred a écrit :
Bonjour,

J'ai comme l'impression que tu mélanges les données d'un tableau dynamique avec les données d'un fichier HF.
En plus l'indice de la boucle (?) n'est pas utilisé. Tu fais quatre recherche idem pour rien ??!!

Ou alors je ne comprend rien...
...

--
___m__(°u°)__m___


effectivement ma boucle pour ne sert pas à grand chose!!
donc après légère modif:
HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
POUR nIdTeam=1 A 4
SI HTrouve(TableauExcel)=Vrai ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,1] + RC + tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]
HModifie(TableauExcel)
HLitSuivant(TableauExcel,FinVacXls)
FIN
FIN

Dans le tableau j'ai les valeurs modifiés que je veux mettre dans ma base. L'indice s'incrémente à chaque tour automatiquement.
Par contre mon problème avec HModifie est toujours le même. J'ai bien la modif en mémoire mais quand je recherche un fichier avec HLitRecherchePremier je vois que ma valeur n'a pas été modifié...
Posté le 04 mai 2016 - 08:21
Bonjour,

Effectivement la boucle ne sert toujours à rien. Peut-être qu'en essayant
cela :

HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
POUR nIdTeam=1 A 4
SI HTrouve(TableauExcel)=Vrai ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,nIdTeam] +
RC + tabTeam[2,nIdTeam] + RC + tabTeam[3,nIdTeam] + RC + tabTeam[4,nIdTeam]
HModifie(TableauExcel)
HLitSuivant(TableauExcel,FinVacXls)
FIN
FIN

"Fred" a écrit dans le message de groupe de discussion :
20167c3df08130cf1e7c8a3acb5f17215aea@news.pcsoft.fr...

Fred a écrit :
[quote]Bonjour,

J'ai comme l'impression que tu mélanges les données d'un tableau dynamique
avec les données d'un fichier HF.
En plus l'indice de la boucle (?) n'est pas utilisé. Tu fais quatre
recherche idem pour rien ??!!

Ou alors je ne comprend rien...
...

--
___m__(°u°)__m___[/quote]

effectivement ma boucle pour ne sert pas à grand chose!!
donc après légère modif:
[code:wl]
HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
POUR nIdTeam=1 A 4
SI HTrouve(TableauExcel)=Vrai ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,1] + RC +
tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]
HModifie(TableauExcel)
HLitSuivant(TableauExcel,FinVacXls)
FIN
FIN

Dans le tableau j'ai les valeurs modifiés que je veux mettre dans ma base.
L'indice s'incrémente à chaque tour automatiquement.
Par contre mon problème avec HModifie est toujours le même. J'ai bien la
modif en mémoire mais quand je recherche un fichier avec
HLitRecherchePremier je vois que ma valeur n'a pas été modifié...
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 04 mai 2016 - 10:25
Salut,
Je ne comprend pas grand chose à ton code mais il est plein d'incohérences...
Déjà si tu fais un HlitSuivant il faut que tu fasse un TantQue Htrouve car sinon tu vas juste lire les enregistrements suivants de ton fichier qui n'auront plus rien à voir avec ta recherche initiale.
Ensuite à quoi sert ta boucle POUR et notamment ton nIdTeam ?
Et enfin le plus simple pour savoir pourquoi ton fichier n'est pas modifié ne serait-il pas de tester si le HModifie s'exécute correctement et si ce n,'est pas le cas d'afficher l'erreur ?

SI PAS HModifie(TableauExcel) ALORS
Erreur(ErreurInfo(errComplet))
FIN


Je ne peux pas t'aider plus car je ne comprend rien à ton code.

--
Seb
Posté le 04 mai 2016 - 12:56
Déjà merci de passer un peu de temps pour m'aider :merci:
Le moins que l’on puisse dire c’est que mon code vous plait pas ! Je vais essayer d’être plus clair :
Ma boucle ne sert pas à rien!!! J’ai un tableau de 4 éléments à 2 dimensions, j'ai besoin de la 1ere colonne de mes 4 éléments. Ces 4 éléments je veux les mettre à 4 emplacements de ma base.
J'ai nommé l'index nIdTeam j'aurais pu l'appeler i c'était la même chose, j'ai besoin de faire 4 tours d'une boucle, l'index s'incrémente automatiquement.

Je fais une recherche sur ma base TableauExcel avec la rubrique FinVacXls et je recherche la valeur sDateFinVacMatin (dans ma base j'ai 4 éléments qui réponde a cette recherche), le HLitRecherchePremier se positionne sur le 1er de ces éléments, HLitSuivant se positionne sur les éléments suivant de ma recherche. Quand je regarde ce bout de code avec le débogueur, dans la base HFSql, je vois que HLitSuivant se positionne bien sur les bons enregistrements. Je modifie la valeur de ma rubrique Vaccation avec les 4 éléments de mon tableau précédent.

Quand passe la ligne HModifie j’ai aucune d'erreur.
Membre enregistré
96 messages
Popularité : +6 (6 votes)
Posté le 04 mai 2016 - 14:14
Ca devient de plus en plus.... heu... boff !
Peut être comme ça...

HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
POUR nIdTeam=1 A 4
SI HTrouve(TableauExcel)=Vrai ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,nIdTeam] +
RC + tabTeam[2,nIdTeam] + RC + tabTeam[3,nIdTeam] + RC + tabTeam[4,nIdTeam]
HModifie(TableauExcel, hNumEnrEnCours)
FIN
HLitSuivant(TableauExcel,FinVacXls)
FIN


Le HlitSuivant() dans la boucle et non dans la condition.

--
___m__(°u°)__m___
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 04 mai 2016 - 14:21
Re,

Donc si j'ai bien tout compris je ferai comme ça :

HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
TANTQUE HTrouve(TableauExcel) ALORS
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,1] +...
RC + tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]
// Tu peux aussi faire comme ça :
// TableauExcel.Vaccation += RC + tabTeam[1,1] +...
// RC + tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]
SI PAS HModifie(TableauExcel) ALORS
Erreur(ErreurInfo(errComplet))
FIN
HLitSuivant(TableauExcel)
FIN


Comme ça si demain tu as 5 occurrences qui correspondent à ta recherche tu n'as pas besoin de modifier ton code pour faire un tour de manège (euh boucle) en plus.
En ce qui concerne le HModifie as tu essayé d'en tester le résultat comme je te l'ai indiqué afin de savoir si tu n'as pas un problème lors de l'écriture ?
Si tu n'as pas d'erreur je ne vois pas de raison que ton HModifie ne fonctionne pas.

--
Seb
Posté le 04 mai 2016 - 14:32
@fred : oui j’avais déjà essayé et j’ai à nouveau essayer mais le résultat est le même
@Sebinc : oui pour la boucle, tantque est mieux si demain je dois faire 5 tours. J’ai tracé comme tu me l’avait dit mais je n’est pas d’erreur.
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 04 mai 2016 - 14:53
Aïe...
Peux tu remettre ton code final qu'on voit ce que ça donne ??

--
Seb
Posté le 04 mai 2016 - 14:54
J'ai posté sur un autre forum la même question et on m'a donné la réponse à ce problème, voici la réponse:

"La rubrique "Vaccation" est de quel type ? Car tu fais des concaténations en chaine mais si c'est une simple chaine qui une limite de taille alors cela expliquerait que le hmodifie() renvoie vrai sans changer la valeur !

Il faut que la rubrique Vaccation soit du type mémo texte."

La rubrique "Vaccation" était en type texte, je l'ai passé en mémo texte et ça fonctionne je retrouve mes valeurs modifié!
Merci à tous pour votre aide :merci:
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 04 mai 2016 - 15:08
Ah j'y aurai pas pensé j'avoue...

--
Seb
Posté le 04 mai 2016 - 15:54
Voici un truc qui va t'aider à trouver ton erreur..

HLitRecherchePremier(TableauExcel,FinVacXls,sDateFinVacMatin)
TANTQUE HTrouve(TableauExcel)
// Avant modification
Info(TableauExcel.Vaccation)

// Modification en mémoire
TableauExcel.Vaccation = TableauExcel.Vaccation + RC + tabTeam[1,1] +...
RC + tabTeam[2,1] + RC + tabTeam[3,1] + RC + tabTeam[4,1]

// Après modification en mémoire
Info(TableauExcel.Vaccation)

// Enregistrement suivant
HLitSuivant(TableauExcel,FinVacXls)
FIN

Ne pas oublier de vérifier la compatibilité du type de ta rubrique avec ce que tu lui affectes
Membre enregistré
96 messages
Popularité : +6 (6 votes)
Posté le 04 mai 2016 - 16:11
Il faut que la rubrique Vaccation soit du type mémo texte.

Et bien voilà... on pense pas toujours à tout !

--
___m__(°u°)__m___