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 lié à la modification d'un enregistrement


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Problème lié à la modification d'un enregistrement
    Bonsoir chère tout le monde voici mon problème:
    J'écris le code suivant pour la modification d'un Enregistrement dans le Fichier PAYS. Cependant, il s'exécute bien lorsque dans ma table mémoire il n'y à k'un seul enregistrement, mais lorsqu'il y'à deux la modification affecte tous les deux enregistrements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    HLitRecherche(REGION,Pays_id,REGION.Pays_id)
    TANTQUE HTrouve()
    	HModifie(REGION)
    	HLitSuivant(REGION,IDREGION)
    FIN
     
    HLitRecherche(pays,Pays_id,pays.Pays_id)
    SI  HTrouve() ALORS
    	pays.Pays_code=SAI_Code_Pays
    	pays.Pays_codetel=SAI_Code_Tel
    	pays.Pays_description=SAI_description
    	pays.Pays_nom=SAI_pays
    	pays.Pays_statut=Choix
    	HModifie(pays)
    	Info("Modification effectuée avec succès")
    	FIN
    Voici la structure des fichiers PAYS ET REGION:

    PAYS(ID_Pays auto;Code;Code_Tel;Nom;Statut;Description)
    REGION(ID_Regionauto;Nom;Statut;Description;ID_Pays#)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    A quoi sert la première boucle ? Tu parcours le fichier région, n'y fait aucune affectation et lance un hModifie()... J'ai d'ailleurs un doute sur cette boucle.
    ensuite je ne vois pas trop comment ton code peux modifier plusieurs pays, sans aucune boucle sur ce fichier.
    Mon premier conseil est de placer un point d'arrêt sur la première ligne, et de suivre le code pas à pas pour bien comprendre ce qu'il se passe.

    Tatayo.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Il y a d'autres choses bizarres dans ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HLitRecherche(REGION,Pays_id,REGION.Pays_id)
    C'est le region.Pays_id à la fin qui me tracasse.

    Region.Pays_id, c'est l'Identifiant Pays de la structure région. Autrement dit, ça me semble être l'identifiant pays du dernier enregistrement lu dans le fichier REGION.

    Donc on va relire la même ligne que la dernière ligne lue dans ce fichier région ?

    Par ailleurs ( c'est peut-être le même bug), tu parles d'une table mémoire. Habituellement, les noms des champs tables sont de la forme TAB_REGION ou TAB_PAYS. Ce n'est pas une obligation, mais ça aide bien à lire le code. Ici,tu parles d'une table mémoire, mais je ne vois pas du tout où cette table mémoire intervient.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    En plus des remarques des autres utililsateurs, attention, en Windev il existe 2 syntaxes pour rechercher :

    HLitRecherche() et HLitRecherchePremier()...

    Le comportement des 2 est différents. Je vous laisse vous référez aux aides respectives de ces fonctions.

    Cordialement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Il y a d'autres choses bizarres dans ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HLitRecherche(REGION,Pays_id,REGION.Pays_id)
    C'est le region.Pays_id à la fin qui me tracasse.

    Region.Pays_id, c'est l'Identifiant Pays de la structure région. Autrement dit, ça me semble être l'identifiant pays du dernier enregistrement lu dans le fichier REGION.

    Donc on va relire la même ligne que la dernière ligne lue dans ce fichier région ?

    Par ailleurs ( c'est peut-être le même bug), tu parles d'une table mémoire. Habituellement, les noms des champs tables sont de la forme TAB_REGION ou TAB_PAYS. Ce n'est pas une obligation, mais ça aide bien à lire le code. Ici,tu parles d'une table mémoire, mais je ne vois pas du tout où cette table mémoire intervient.
    Bonsoir expert, je ne sais pas si je n'arrive pâs mieux à exposer mon code et mes termes paraissent très confus.
    En effet, le fichiers des Pays me permet d'enregistrer tous les pays et chaque pays peut avoir plusieurs Régions. Lorsque je dois effectuer une modification sur un Pays automatiquement celle-ci doit se repercuter sur le fichier des Regions.
    Raison du Parcours dans le fichier Des Regions. Lorsque ce parcours est terminé la modification s'effectue sur le Pays conçerné.
    Et l'utilisateur devra constater cette modification au niveau des tables, à savoir Tab_Pays et Tab_Region.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Citation Envoyé par Asphin Voir le message
    Bonsoir expert, je ne sais pas si je n'arrive pâs mieux à exposer mon code et mes termes paraissent très confus.
    En effet, le fichiers des Pays me permet d'enregistrer tous les pays et chaque pays peut avoir plusieurs Régions. Lorsque je dois effectuer une modification sur un Pays automatiquement celle-ci doit se repercuter sur le fichier des Regions.
    Raison du Parcours dans le fichier Des Regions. Lorsque ce parcours est terminé la modification s'effectue sur le Pays conçerné.
    Et l'utilisateur devra constater cette modification au niveau des tables, à savoir Tab_Pays et Tab_Region.
    Bonsoir programmeur, le besoin est clair. Mais le code est confus.

    Normalement, la table TAb_pays devrait intervenir quelque part dans le code. Ou alors je n'ai rien compris au besoin.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Bonsoir programmeur, le besoin est clair. Mais le code est confus.

    Normalement, la table TAb_pays devrait intervenir quelque part dans le code. Ou alors je n'ai rien compris au besoin.
    Expert je commente mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //Lire dans le fichier Region vérifier l'ensemble des Regions ayant le pays à modifier afin de modifier le fichier région
    HLitRecherche(REGION,Pays_id,REGION.Pays_id)
    TANTQUE HTrouve()
    	HModifie(REGION)
    	HLitSuivant(REGION,IDREGION)
    FIN
    
    // lire et modifier le Pays conçerné après l'avoir trouver.
    HLitRecherche(pays,Pays_id,pays.Pays_id)
    SI  HTrouve() ALORS
    	pays.Pays_code=SAI_Code_Pays
    	pays.Pays_codetel=SAI_Code_Tel
    	pays.Pays_description=SAI_description
    	pays.Pays_nom=SAI_pays
    	pays.Pays_statut=Choix
    	HModifie(pays)
    	Info("Modification effectuée avec succès")
    	FIN
    dans la prise de focus de la fenêtre j'inserre le code suivant pour charger ma Tab_Pays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TableSupprimeTout(TABLE_Pays)
    POUR TOUT pays 
    	TableAjouteLigne(TABLE_Pays,pays.Pays_id,pays.Pays_nom,pays.Pays_code,pays.Pays_codetel,pays.Pays_description,pays.Pays_statut,pays.Pays_id)
    FIN

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    On va résoudre un problème à la fois. Le fichier région, je l'oublie. On va s'occuper uniquement du fichier Pays.

    Juste avant la ligne 9, ajoute cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    info ( " on recherche l'enregistrement " + pays.pays_id + " pour le modifier" )
    Ca ne va pas solutionner ton problème, mais ça va t'aider à trouver la solution.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    On va résoudre un problème à la fois. Le fichier région, je l'oublie. On va s'occuper uniquement du fichier Pays.

    Juste avant la ligne 9, ajoute cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    info ( " on recherche l'enregistrement " + pays.pays_id + " pour le modifier" )
    Ca ne va pas solutionner ton problème, mais ça va t'aider à trouver la solution.
    Bonsoir Expert le constat fait est que, en ajoutant la ligne que vous me conseillez la modification ne s'effectue que sur une ligne, or je souhaite modifier la ligne suivante.
    Peut être cela est dû au chargement de ma fenêtre MDI.
    En effet, Mon application utilise les Plans pour l'affichage des enregistrements contenus dans la BD maintenant pour l'ajout comme la modification d'un enregistrement, je charge une fenêtre MDI paramétrée grace et c'est en essayant réellement de comprendre ce que faisait mon code que j'ai du détecter l'erreur! Merci vraiment de vos apports!
    Je constate qu'en me concentrant de plus en plus je résouds facilement mes problèmes vraiment merci

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Je n'ai rien compris à ta réponse.

    Normalement, la ligne en question n'a rien changé au comportement du programme. L'idée était juste de t'aider à comprendre pourquoi ton programme plante. Si tu veux, poste la nouvelle version de ton code, pour vérifier si c'est bon ou non.

    PS : le code que tu montres, il est dans un bouton 'Sauvegarder', ou il est ailleurs.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    HlitRecherche permet de trouver un enregistrement, mais ne se positionne pas dessus.
    HLitRecherchePremier va faire comme le HLitRecherche mais en se positionnant dessus donc lorsque tu vas faire ton HModifie il va modifier l'enregistrement en cours (qui est celui qui a été trouvé avec le HLitRecherchePremier)

    Tu devrais essayer cette syntaxe (HliRecherchePremier) avec les régions pour la boucle et pour le pays.

    En espérant que ça règle ton problème.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Programmeur
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Je n'ai rien compris à ta réponse.

    Normalement, la ligne en question n'a rien changé au comportement du programme. L'idée était juste de t'aider à comprendre pourquoi ton programme plante. Si tu veux, poste la nouvelle version de ton code, pour vérifier si c'est bon ou non.

    PS : le code que tu montres, il est dans un bouton 'Sauvegarder', ou il est ailleurs.
    Voici mon nouveau code pour le bouton de modification et il marche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HLitRecherche(Region,IDREGION,Region.IDREGION) 
     SI HTrouve()
    	Region.Pays_id=COMBO_Pays..Valeur
    	Region.Region_Description=SAI_Region_Description
    	Region.Région_Nom=SAI_Région_Nom
    	HModifie(Region)
    	Info("Modification effectuée avec succès")
    	HLitPremier(Region)
    fin

  13. #13
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour Asphin,

    Ton code ne veut strictement rien dire, tu recherches une région par rapport à son ID et tu lui dis que l'ID c'est celui de la région que tu recherches. Pour faire simple c'est comme si tu recherchais un numero de moteur pour une voiture, et qu'au lieu de rechercher la voiture par rapport à sa plaque d'immatriculation tu lui donnais son numero de moteur, que tu ne connais pas au demeurant puisque tu le recherches. On est dans quelque chose de totalement aberrant et dans un système de référence circulaire.

    Ensuite tu utilises HLitRecherche(), c'est une solution moi je n'utilises que ça. Contrairement à ce que dit pianochaoz, le HLitRecherche() fait bien une lecture de l'enregistrement, par contre il diffère de HLitRecherchePremier() dans le sens que HLitRecherche() fait une recherche générique par défaut, donc si tu recherches 1, il peut te renvoyer le 10,11,100,1524,... Il faut donc lui passer comme option "hidentique" pour qu'il fasse une recherche à l'identique.

    HlitRecherchePremier() quant à lui fait une recherche à l'identique par défaut et est utile pour démarrer une boucle de recherche.

    Tout d'abord un pays est référencé par son code. C'est un code ISO, donc une norme et il n'existe qu'un seul et unique pays pour code. Selon moi l'id est en trop mais bon admettons.
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SI HLitRecherche(Pays,Pays.Pays_id,SAI_Pays_ID,hIdentique) ALORS
    	pays.Pays_code=SAI_Code_Pays
    	Pays.Pays_codetel=SAI_Code_Tel
    	Pays.Pays_description=SAI_description
    	Pays.Pays_nom=SAI_pays
    	Pays.Pays_statut=Choix
    	HModifie(Pays)
    FIN

    Ensuite pour les régions, je ne vois pas ce que tu veux modifier. Un pays peut avoir plusieurs régions, mais une région ne peut avoir qu'un seul et unique pays. La relation est tellement simple. C'est du (0,n) pour le pays et du (1,1) pour la région. En effet, une région ne peut pas exister sans son pays. Dans la table des régions tu dois donc avoir une clé en doublons qui est l'id du pays et qui ne doit jamais changer !!!.

    A partir du moment où tu as créé ta région qui est reliée à ton pays, toutes le modifications que tu vas effectuer sur le pays n'auront absolument aucunes influences sur les régions. Par contre si tu supprimes un pays, tu dois également supprimer toutes les régions qui lui appartiennent afin de ne pas te retrouver avec des éléments orphelins dans ta base. Mais si ce n'est pas comme ça que tu ça fonctionne chez toi, c'est qu'il y a un énorme problème d'analyse au départ.

    Bon dev,
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

Discussions similaires

  1. Problème de modification d'un enregistrement à partir d'un UserForm
    Par TSAFACK-M dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/08/2016, 14h01
  2. Problème lors de la modification d'un enregistrement
    Par Racha07 dans le forum Hibernate
    Réponses: 0
    Dernier message: 02/06/2015, 12h45
  3. [MySQL] problème de modification d'un enregistrement en php
    Par mvictorinesonia dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 18/08/2014, 17h24
  4. [WD17] Problème de modification d'un enregistrement
    Par xGuigui78 dans le forum WinDev
    Réponses: 21
    Dernier message: 19/11/2012, 17h22
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

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