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 :

[WD9] Pb de liaison entre 2 champ


Sujet :

WinDev

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut [WD9] Pb de liaison entre 2 champ
    Bonjour tout le monde,

    J'ai une première combo qui correspond au "NomClt" dés que je choisit le "NomClt" désiré il m'affiche le renseignements sur ce dernier.

    Ensuite j'ai une deuxième combo qui correspond aux "ImmatriculationVéhicule". J'aimerais pouvoir choisir l'immatriculation au choix seon les immatriculations des véhicules appartenant au client.

    Sachant que "CodeClt" est clé étrangére de ma table Véhicule.

    j'ai fais comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    HLitRecherche(CLIENT, C_CODECLT, CodeClt)
    SI VEHICULE.V_CODECLT = CodeClt ALORS
    	HOuvre(VEHICULE)
    	HLitRecherchePremier(VEHICULE, VEHICULE.V_IMMATVEH, ConsultationModifClt.Combo_Immat_Veh)
    	Combo_Immat_Veh = VEHICULE.V_IMMATVEH
    	NumSérieVéh = VEHICULE.V_N_SERIVEH
    	KmVéh = VEHICULE.V_KMVEH
    	HFerme(VEHICULE)
    mais ça foncitonne pas. Lorsque je debugge, il me dit que "CodeClt" est "31" alors que le "CodeClt" est "1". Donc forcément, il m'affich pas la bonne immatriculation.

    J'espère être assez claire.

    Merci d'avance pou votre aide.

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Du nouveau!!
    Voila j'ai changé mon code qui et devenu le suivant :
    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
    HOuvre(VEHICULE)
    HOuvre(CLIENT)
    HLitRecherchePremier(VEHICULE,V_CODECLT,CLIENT.C_CODECLT)
     
    HOuvre(MODELE)
    HLitRecherchePremier(MODELE,M_TYPMODEL,VEHICULE.V_TYPMODEL)
     
    Combo_Immat_Veh = VEHICULE.V_IMMATVEH
    NumSérieVéh = VEHICULE.V_N_SERIVEH
    KmVéh = VEHICULE.V_KMVEH
     
    ModèleVéh = MODELE.M_LIBMODEL
     
    HFerme(CLIENT)
    HFerme(VEHICULE)
    HFerme(MODELE)
    Mon problème maintenant c'est que toutes les ImmatriculationVéhicule s'affiche même ceux qui n'appartiennent pas au client choisit auparavant alors que j'aimerais qu'il y ai juste les ImmaticulationVéhicule appartenant au client choisit qui soit dans la combo.

    Est-ce que cela est-il possible??
    Si oui, comment??

    Merci pour votre aide.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Pour remplir ta combo tu dois utiliser une boucle, et par ailleurs ta combo doit être une combo mémoire, pas liée à un fichier.
    Tu peux aussi la lier à une requete, auquel cas c'est ta requête qui va faire le tri, et tu n'a pas besoin de coder son remplissage, sauf qu'il faut re-executer la requete à chaque changement de client.

    A+

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Salut,

    merci pour ton renseignement.

    Comment réalise-tu une combo mémoire??
    J'y ai pensé a utiliser une requête mais j'arrive pas. Je vois pas comment utiliser les fonction.....

    Peux tu m'aider s'il te plais!!

    merci d'avance!!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Pour la combo mémoire, c'est dans l'onglet Contenu, il y a des boutons radios.
    Tu dois la remplir avec ListeAjoute(Combo1, Champ)
    Lorsque tu as fais ton HLitRecherchePremier() tu alimente ta combo avec une boucle.

    Pourquoi est ce que tu ouvres les fichiers (HOuvre - HFerme) ? normalement c'est inutile, ils sont ouverts automatiquement à l'initialisation de ton projet.

    Pour le code je ferai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    HLitRecherchePremier(VEHICULE,V_CODECLT,CLIENT.C_CODECLT)
    HLitRecherchePremier(MODELE,M_TYPMODEL,VEHICULE.V_TYPMODEL)
    TANTQUE PAS HEndehors(VEHICULE)
    ListeAjoute(Combo_Immat_Veh, VEHICULE.V_IMMATVEH)
    HLitSuivant(VEHICULE)
    FIN
    NumSérieVéh = VEHICULE.V_N_SERIVEH
    KmVéh = VEHICULE.V_KMVEH
     
    ModèleVéh = MODELE.M_LIBMODEL
    Tiens moi au courant

    A+

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Pour la combo mémoire, c'est dans l'onglet Contenu, il y a des boutons radios
    Dans l'onglet Contenu j'ai 3 bouton radios qui sont : "Liste", "Table", "Fenêtre Popup". Mais c'est tout désolé je voit donc pas ce que tu veux dire.

    Donc ça fonctionne pas car c'est toujours une combo ficher.

    merci d'avance!!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Tu es sur quelle version de WD ?

    Tu dois avoir quelque part, Source de remplissage ce qui te permets de choisir le mode de remplissage soit depuis un fichier/ requête (combo fichier)soit en programmation (Como mémoire).
    Si tu ne trouve pas tu peux recréer la combo et là tu choisi de l'alimenter par programmation.

    A+

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Je travail sous Windev 9.

    Je l'ai supprimé puis recommencé mais problème :
    * Il m'affiche malgrès tout les 2 Immatriculations lorsque je sélectionne le premier client
    * Il m'affiche une seule immatriculation lorsque je sélectionne le deuxième client.

    Voila le code se situant derrière l'événement du choix de client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HLitRecherchePremier(VEHICULE,V_CODECLT,CLIENT.C_CODECLT)
    HLitRecherchePremier(MODELE,M_TYPMODEL,VEHICULE.V_TYPMODEL)
    TANTQUE PAS HEnDehors(VEHICULE)
    	ListeAjoute(Combo_Immat_Veh, VEHICULE.V_IMMATVEH)
    	HLitSuivant(VEHICULE)
    FIN
    Voici le code se situant derrière l'évènement du choi l'immatriculation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ModèleVéh = MODELE.M_LIBMODEL
    NumSérieVéh = VEHICULE.V_N_SERIVEH
    KmVéh = VEHICULE.V_KMVEH
    Merci d'avance pour ton aide.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Essaye de séparer les deux appels aux fichiers,

    Peux tu me dire qu'elle est la liaison entre VEHICULE et MODELE, est ce que ces deux tables ne peuvent pas être fusionnée en une seule ?

    Quand tu change de client il faut que tu efface le contenu de la combo pour l'alimenter à nouveau avec les nouvelles informations avec :
    (ListeSupprimeTout(Combo_Immat_Veh)

    A+

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Essaye de séparer les deux appels aux fichiers
    Que veux tu dire par là??

    Peux tu me dire qu'elle est la liaison entre VEHICULE et MODELE, est ce que ces deux tables ne peuvent pas être fusionnée en une seule ?
    entre VEHICULE et MODELE, l'association c'est 'correspondre' avec comme cardinlité : "1 modèle corresond à 1 ou plusieurs véhicules. 1 Véhicule correspond 1 et 1 seul modèle." Pourquoi le fusionné en une seule, je pense que c'est mieu de différencié, nn??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A chaque modification de Combo_NomClient
    ListeSupprimeTout(Combo_Immat_Veh)
    J'ai essayé ça en plus mais ca me supprime rien enfin je vais étudier la chose!!

    merci d'avance!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Je pense que le meilleur moyen de remplir tes champs c'est d'utiliser une requete puisque tu dois conserver les valeurs des champs qui proviennent de plusieurs fichiers. Si tu rempli une Combo mémoire tu ne conserve pas le lien avec l'enregistrement en cours, donc tu ne peux pas faire la partie 'Après sélection du véhicule' comme ça.
    Il faut, soit, repenser les liaisons entre tes champs et les fichiers et à chaque modification des combo tu fais un appel à FichierVersEcran(), soit, tu crée une requete depuis l'editeur de requete, puis tu lie les champs à cette requete (qui te donne automatiquement le libellé du modèle à chaque sélection du véhicule) et à chaque sélection dans la combo tu fais un FichierVersEcran().
    Ta requète doit prendre comme paramètre l'identifiant du CLIENT.
    Lors de la sélection du CLIENT dans la combo Client tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Req_recherche_Vehicule.param_Nom = Combo_Client
    HExecuteRequete(Req_recherche_Vehicule)
    FichierVersEcran()
    En considérant que param_Nom est le nom du paramètre dans la condition de sélection des enregistrements, et Req_recherche_Vehicule, le nom de la requète.

    Quand tu change de véhicule dans ta combo_Immat_Veh tu relance un FichierVersEcran() pour que les autres valeurs des champs soient mis à jour.
    Chacun des champs concernés étant lié à un champ de la requète.
    Par contre cette fonctionnalité ne te permet pas de mettre à jour les bases de données, c'est une requète sélection.

    Ma question concernant la liaison entre Véhicule et modèle c'était juste au cas ou tu n'a aucune recherche ou statistique sur le modèle du véhicule, auquel cas c'est inutile de créer deux fichiers.

    A+

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Bonjour,

    meci pour ton aide.

    Sui désolé mais c'est la première fois que je réalise unerequête sous Windev donc j'aimerais avoir de l'aide s'il te plais. Puis surtout je vois pas trop comment la faire c'est à dire ce qu'elle doit afficher? et quel condition je doit lui mettre? et comment on créer des paramètres sous windev?(j'ai cherché mais j'y arrive toujours pas)

    Merci d'avance pour ton aide!!

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Comme Elecoest le disait hier :
    Aide --> Index --> requete paramètrée

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réonse à Guardian
    J'ai déja regardé comme j'ai dit dans mon dernier post, mais j'y arrive pas!!

    merci d'avance!!
    Cordialement.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    Le plus simple, c'est de reprendre le Guide d'autoformation fournit avec Windev ou le Guide 'Etat et Requête" qui expliquent très clairement et pas à pas comment faire une requête. Tu peux commencer par une requête sans paramétres, en fixant une condition par ex Non_Client = "DUPONT" puis la transformer en requête paramètrée.

    A+

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Bonjour,

    Voila j'ai essayé la requête sivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT V_IMMATVEH
     FROM VEHICULE, CLIENT
     WHERE VEHICULE.V_CODECLT = CLIENT.C_CODECLT
     AND CLIENT.C_NOMCLT = 'VIVIEN'
    qui lorsque je la teste me donne bien l'immatriculaton du véhicule apprtenant au client portant le nom 'VIVIEN'.


    Mais lorsque je la met dans le code dela manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Combo_Immat_Veh = HExécuteRequête(Req_recherche_Vehicule)
    FichierVersEcran()
    il m'affiche "1" dans ma combo correspondant a l'immatriculation alors que l'immatriculation c'est "1325KJ28".

    Donc losque je regarde la valeur de "combo_Immat_Veh" en mode debug, je m'apperçoit que c'est égal à 31.

    Je comprend pas pourquoi.

    Merci d'avane pour ton aide!!

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    C'est normal, le résultat de la requête donne vrai (donc 1) si elle est effectuée sans erreur.
    Tu dois lier le champ combo avec la requete dans l'onglet Contenu, en choisissant les bonnes valeurs pour les champs Valeur mémorisée, valeur affichée et Valeur de parcours et en choisissant Combo fichier. Pas besoin de code pour ça.

    A+

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Réponse à basam95
    Ok merci, je pense que ça fonctionne.

    Mais ma requête est de a forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT V_IMMATVEH
     FROM VEHICULE, CLIENT
     WHERE VEHICULE.V_CODECLT = CLIENT.C_CODECLT
    AND CLIENT.C_NOMCLT = 'VIVIEN'
    et je souhaiterais dire que 'VIVIEN' est en réalité la comboNomClt.

    Plus précisément j'amerais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT V_IMMATVEH
     FROM VEHICULE, CLIENT
     WHERE VEHICULE.V_CODECLT = CLIENT.C_CODECLT
    AND CLIENT.C_NOMCLT = ConsultationModifClt.Combo_NomClient
    Mais il me dit la'erreur suivante :
    Warning : Le fichier ConsultationModifClt n'existe pas dans la clause FROM
    Req_recherche_Vehicule, Code SQL, ligne 4, colonne 23
    Cmment je peux résoudre ce problème??

    Merci d'avance!!

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut,

    A la place de ConsultationModifClt.Combo_NomClient tu mets un paramètre, par exemple pNomClient et avant d'appeler la requete avec HExecuteRequete(). Tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Req_recherche_Vehicule.pNomClient = Combo_NomClient..ValeurMémorisée
    HExécuteRequête(Req_recherche_Vehicule)
    Ca devrait être ok avec ça.

    Bye

  20. #20
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à basam95
    Voila, j'ai réalisé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Req_recherche_Vehicule.pNomClient = Combo_NomClient..ValeurMémorisée
    HExécuteRequête(Req_recherche_Vehicule)
    FichierVersEcran()
    mais il me dit la chose suivante :
    Warning : Rubrique pNomClient inconnue dans le fichier . Vérifiez que la requête est en phase avec la description des fichiers.
    Req_recherche_Vehicule, Code SQL, ligne 4, colonne 23
    Je vois pas pou l'instant comment faire.

    Merci d'avance!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Liaison entre deux champs par une référence
    Par gdhia dans le forum Excel
    Réponses: 1
    Dernier message: 27/11/2012, 14h06
  2. [AC-2010] Liaison entre un champ "nombre" et un intervalle
    Par B-CAB dans le forum Modélisation
    Réponses: 1
    Dernier message: 01/03/2011, 18h23
  3. Réponses: 1
    Dernier message: 22/08/2007, 01h05
  4. Liaison entre liste déroulante et un champs
    Par lolo_bob2 dans le forum Access
    Réponses: 4
    Dernier message: 19/04/2006, 12h54

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