IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème sur boucle


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Fonctionnaire
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Fonctionnaire

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Problème sur boucle
    Bonjour, j'ai un petit problème, j'ai ce code (voir ci-dessous) mais le soucis c'est que malgrés la boucle la modification ne se fait que sur la dernière valeur "Oui" trouvée dans la colonne "Valide". Auriez-vous une solution. Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    POUR TOUTE LIGNE DE TABLE_ListeTAD
    SI COL_Valide..Valeur = "Oui" ALORS
    ListeTAD._1_Fondamentaux = SAI_DateCourtTAD
    HModifie(ListeTAD)
    FIN
    FIN

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    HModifie modifie l'enregistrement en cours du fichier, sauf si on lui précise le numéro d'enregistrement (et pas une clé, ni l'Id automatique).
    Je suppose que la dernière ligne avec "Oui" est la dernière lue pour alimenter la table.

    De mémoire (je n'utilise pas HFSQL), il est déconseillé de travailler avec le numéro d'enregistrement.
    Il faudrait donc mémoriser pour chaque ligne la clé ou l'Id de l'enregistrement correspondant, éventuellement dans une colonne cachée, relire cet enregistrement, puis le modifier.

    Au passage, plutôt que d'écrire "Oui", vous pourriez cocher un interrupteur ou un sélecteur et simplement tester la condition Vrai/Faux.

    Bon travail

    Hemgé

    PS : si vous passez en mode débogueur, vous pourrez suivre vos itérations à travers votre boucle, ce qui vous permettra de constater que le HModifie (ou toute autre instruction) est bien exécutée.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut

    Ta table est elle reliée à un fichier ou est ce une table mémoire?
    Pourquoi ne pas récupérer le résultat de HModifie afin de voir pourquoi la modif n'est pas effectuée?

    Bon DEV

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par zouzoukha Voir le message
    Salut

    Ta table est elle reliée à un fichier ou est ce une table mémoire?
    Pourquoi ne pas récupérer le résultat de HModifie afin de voir pourquoi la modif n'est pas effectuée?

    Bon DEV
    Bonjour,

    Votre réponse n'est-elle pas un peu 'rapide' ?

    Il s'agit selon toute vraisemblance d'une table mémoire. S'il s'agissait d'une table fichier, elle serait mise à jour automatiquement.
    Mais, peu importe, c'est sans relation avec le problème soulevé.

    Quant au fait que "la modif n'est pas effectuée", cela ne reflète pas le problème soulevé.
    En fait, une modif est bien effectuée et le problème est que c'est toujours le même enregistrement qui est modifié.
    la modification ne se fait que sur la dernière valeur "Oui" trouvée dans la colonne "Valide"
    Cette modification, via HModifie, est positionnée dans le code de la boucle, elle ne peut être effectuée qu'au sein de la boucle, et même pas en sortie.
    Benoist28200 s'attendait donc à ce que la modification soit effectuée pour chaque ligne concernée et il ne comprend pas.

    Nous sommes bien d'accord que le code devrait à terme être enrichi avec un contrôle d'erreur.
    Mais cela ne changerait rien au fait que :
    • HModifie modifie l'enregistrement courant en mémoire et le réécrit sur l'enregistrement optionnellement spécifié du fichier (sur lui-même si aucun n° (physique) d'enregistrement n'est précisé) ;
    • la table est remplie avant le passage dans la boucle ;
    • la boucle ne parcourt pas le fichier ni ne lit aucun enregistrement.


    Plutôt que de lui poser les questions générales classiques et automatiques, ce serait plus efficace de lire son code (6 lignes, ce n'est pas la mer à boire !) et de lui répondre de manière circonstanciée et utile.

    A la lecture des explications, on suppose que l'enregistrement courant est le dernier enregistrement affiché dans la table.
    Mais cela pourrait être n'importe quel enregistrement du fichier qui aurait été lu entre la fin du remplissage de la table et l'entrée dans la boucle. (voir le test proposé ci-dessous)

    Pour spéculer davantage, il est probable que le dernier enregistrement de la table est positionné à "Oui" dans la colonne valide.
    Au vu du code exposé et du contexte, il est évident que la table est remplie avant le parcours de la boucle et que le fichier n'est plus parcouru au sein de la boucle.

    Si Benoist28200 positionne ce dernier enregistrement à "Non", il verra immédiatement que l'enregistrement modifié restera le même, soit le dernier lu avant le parcours de la boucle, même s'il est positionné à non.
    Mieux encore, il pourrait effectuer la lecture d'un enregistrement juste avant l'entrée dans sa boucle, enregistrement dont il s'assurerait que la valeur de "Valide" est à "Non" dans la table.
    Et il constaterait immédiatement que c'est bien cet enregistrement qui serait dorénavant modifié.

    En résumé, sur base de la doc sur HModifie :
    Modifie l'enregistrement spécifié ou l'enregistrement présent en mémoire dans le fichier de données (la requête ou la vue).

    Syntaxe
    <Résultat> = HModifie([<Nom du fichier> [, <Numéro d'enregistrement> [, <Options>]]])
    (...)
    <Numéro d'enregistrement> : Entier optionnel

    Numéro de l'enregistrement à modifier. L'enregistrement chargé en mémoire est ré-écrit sur l'enregistrement spécifié.
    (...)
    Si ce paramètre n'est pas spécifié (est égal à 0 ou à la constante hNumEnrEnCours), la fonction HModifie va modifier l'enregistrement en cours dans le fichier de données.
    Hemgé

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Bonjour,

    Votre réponse n'est-elle pas un peu 'rapide' ?

    Il s'agit selon toute vraisemblance d'une table mémoire. S'il s'agissait d'une table fichier, elle serait mise à jour automatiquement.
    Mais, peu importe, c'est sans relation avec le problème soulevé.
    Hemgé
    Absolument d'accord!
    Désolé je n'avais pas bien lu que la modif était effectuée sur le dernière valeur seulement.

    Toutefois, j'ai l'habitude d'utiliser une table fichier avec une colonne en saisie non liée à une rubrique.

    Dans lequel des cas le code de Benoit fonctionnerait!

    Le balayage de la table fichier positionne bien sur l'enregistrement du fichier et après le test procède à la modif.

Discussions similaires

  1. Problème sur boucle
    Par laurent27530 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/02/2016, 10h22
  2. Problème sur boucle
    Par maf dans le forum R
    Réponses: 2
    Dernier message: 30/04/2014, 11h10
  3. [MySQL] Problème sur boucle WHILE
    Par t671 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 19/09/2012, 22h37
  4. [XL-2010] Problème sur boucle
    Par xdoreau dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/07/2011, 16h04
  5. [MySQL] Problème sur Boucle While après un LEFT JOIN
    Par matperino dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 28/05/2007, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo