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 :

[WD12] Relation entre 2 fichiers


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut [WD12] Relation entre 2 fichiers
    J'ai créé deux fichiers. Un se nommant "personne" avec des champs tels que : Nom, Prénom, Age, Adresse et un autre "Livre" avec les champs : Titre ,Auteur, Particularité.
    Puis, j'ai lié ces deux fichiers. Une personne pouvant avoir plusieurs livres et un livre plusieurs personnes et ai lancé le RAD. Je me retrouve donc à avoir une fenêtre personne/livre qui me permet d'attribuer un livre à une personne. (dans la partie haute, j'ai un livre, dans la partie basse, une table me permettant de sélectionner une personne)

    Je souhaiterai avoir une fenêtre avec une personne dans la partie haute et dans la partie basse, une table avec une liste de livre correspondant à certains critères. Par exemple, n'apparaîtraient que les livres pour les enfants si l'age de la personne est inférieure à 10 ans.

    Comment incorporer des critères ? (dans l'affichage des lignes de la table ?)

  2. #2
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Pour filtrer une table tu peux utiliser HFiltre, une requête paramétrée ou remplir ta table manuellement avec une boucle POUR TOUT AVEC.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    J'ai tenté deux des solutions proposées mais je n'y arrive pas. Voilà ce que j'ai réalisé.

    Dans ma fenêtre, (dedans se trouvent un champ lié au nom de la personne et une table comprenant les champs de la relation entre les deux fichiers : ID_livre, ID_personne et ID_personne_livre) j'ai ajouté d'abord le code suivant sous l'initialisation de la dite table :

    sRubCléParcours est une chaîne
    sRubCléParcours = HFiltre(Livre, "particularité<'18'")
    HLitPremier(Livre, sRubCléParcours)
    TANTQUE Pas HEnDehors()
    TableAjouteLigne(TABLE_Personne_Livre,Personne_Livre.IDLivre)
    HLitSuivant(Livre, sRubCléParcours)
    FIN

    HDésactiveFiltre(Livre)

    Ne fonctionnant pas je l'ai remplacé par le code suivant :

    POUR TOUT Livre AVEC "particularité<18"
    ListeAjoute(TABLE_Personne_Livre,Personne_Livre.IDLivre)
    FIN

    mais pas plus de réussite.

    Lorsque j'ouvre ma fenêtre, j'ai toujours la liste entière de tous mes livres.

  4. #4
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Si tu veux remplir manuellement ta table assure toi que dans l'onglet contenu, ta table est bien en mode de remplissage par programmation. Ensuite, ListeAjoute c'est pour les listes et TableAjoute ou TableAjouteLigne c'est pour les tables. Tes 2 solutions devraient fonctionner même si elles sont plus lentes que de lier la table au fichier et de filtrer le remplissage.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Je galère un peu (enfin beaucoup !) sur ce point. J'ai donc refait mon exemple depuis le départ et je vais te décrire ce que j'ai fais. (tu pourras ainsi mieux suivre ma progression)

    Création d'un fichier "personne" avec pour champs IDPersonne, Nom, Prénom, Age_perso.
    Création d'un fichier "livre" avec pour champs IDLivre, Type, Auteur et age_livre
    Création de la liaison entre "personne" et "livre" (chaque personne peut avoir plusieurs livres mais peut aussi ne pas en avoir. Chaque livre peut appartenir à plusieurs personnes ou à aucune). Après cette création, un fichier de liaison "Personne_livre" avec les champs IDlivre, IDPersonne, IDPersonne_livre a été créé automatiquement.

    Lancement du RAD.

    De multiples fenêtres et états ont été créés mais je ne me suis intéressé qu'à une seule. Celle permettant d'attribuer un livre à une personne. Voici la description de cette fenêtre (qui a pour nom Relation Personne/Livre)

    Dans la moitié haute, les champs du livre préalablement sélectionné dans une fenêtre "Table_Livre" (donc on retrouve 3 champs qui ont en relation les champs de mon fichier "livre" : Type, Auteur et Age_livre)

    Dans la moitié basse, une table "personne_livre" dans laquelle on retrouve les champs du fichier liaison.

    C'est dans cette table que je voudrais qu'apparaissent que certaines lignes liées à une critère.

    Donc, si j'ai bien tout compris c'est dans le code de cette table sous la rubrique "Initialisation" que je dois mettre mon filtre.

    Voici ce que j'ai mis donc :

    sRubCléParcours est une chaîne
    sRubCléParcours = HFiltre(Personne, "age_perso<'18'")
    HLitPremier(Personne, sRubCléParcours)
    TANTQUE PAS HEnDehors()
    TableAjouteLigne(TABLE_Personne_Livre,Personne_Livre.IDPersonne)
    HLitSuivant(Personne, sRubCléParcours)
    FIN

    HDésactiveFiltre(Personne)

    Mais sous la description de la dite table, je n'ai, sous l'onglet "contenu" un mode de remplissage par programmation. Je n'ai que pour "source pour le remplissage" les options Mémoire, Fichier chargé en mémoire et Fichier avec accès direct. Et dans source fichier, que dois-je mettre ?

    Si je change tous ces paramètres, le bouton valider créé par la génération RAD, permettant d'attacher le livre à la personne risque de ne plus fonctionner ?


    Enfin, je te remercie de m'aider. Mes questions te paraissent peut-être un peu simplistes mais c'est mes premiers pas sur ce logiciel.

  6. #6
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Je suis désolé ils ont changé les noms avec la 14 et je n'ai pas porté attention. Il faut que la table soit mémoire afin qu'elle ne se remplisse pas d'elle même avec le fichier. Sinon laisse la table en mode "fichier avec accès direct", assure-toi que l'option "Utiliser la fonction HFiltre pour parcourir le fichier" soit activé, utilises age_perso comme clé de parcours et met seulement l'appel à HFiltre dans le code d'initialisation. Les enregistrements seront donc filtrés sur le fichier lui-même et ta table se remplira toute seule. N'oublie pas de mettre le HDésactiveFiltre(Personne) dans le code de fermeture de la fenêtre par contre.

  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 peux aussi essayer de créer une nouvelle fenêtre avec l'assistant de création de fenêtre, utilise le mode compatible 11.
    Tu choisis comme modèle Fiche avec Table relié et tu suis l'assistant. Ta fenêtre sera crée avec tout le code nécessaire pour la faire fonctionner.

    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Ramant toujours sur ce problème, je vous mets les codes de la fenêtre,de la table jointe et du bouton valider, qui se sont faits par le RAD et que je souhaite modifier ou conserver (pour le bouton valider)

    Déclaration globale de FEN_relation_LIVRE_Personne
    PROCEDURE FEN_Relation_LIVRE_Personne()
    // Affichage des enregistrements
    FichierVersEcran()
    // Filtre pour la table des FichierD
    HFiltre(LIVRE_Personne,IDLIVRE,LIVRE.IDLIVRE)
    // Valeur de retour par défaut
    MaFenêtre..ValeurRenvoyée = Faux


    Fermeture de FEN_relation_LIVRE_Personne
    HDésactiveFiltre(LIVRE_Personne)

    Initialisation de la TABLE_LIVRE_Personne
    COL_IDLIVRE..Visible = Faux

    Clic sur le bouton Valider
    // Vérification des champs
    SI TABLE_LIVRE_Personne..Occurrence = 0 ALORS
    Erreur("Vous devez saisir des LIVRE_Personne")
    RETOUR
    FIN
    // Mise à jour du contexte HF
    EcranVersFichier()
    // Ajout ou modification de LIVRE
    SI LIVRE..NouvelEnregistrement = Vrai ALORS
    HAjoute(LIVRE)
    SINON
    HModifie(LIVRE)
    FIN
    // On a ajouté le LIVRE
    // Maintenant on va ajouter les LIVRE_Personne correspondants
    POUR TOUTE LIGNE DE TABLE_LIVRE_Personne
    // On affecte l'identifiant de LIVRE dans les colonnes de la table des LIVRE_Personne
    TABLE_LIVRE_Personne.COL_IDLIVRE = LIVRE.IDLIVRE

    // Enregistrement de la table
    TableEnregistre(TABLE_LIVRE_Personne)
    FIN
    // Valeur de retour
    MaFenêtre..ValeurRenvoyée = Vrai

    Description de la table :

    3 champs IDPersonne, IDLIVRE, IDLIVRE_personne (découlant du fichier relation)
    liaison : Aucun
    Contenu :
    fichier chargé en mémoire
    source fichier : LIVRE_Personne
    Rubrique mémorisée : Aucun
    Parcours automatique
    Rubrique de parcours : IDLIVRE
    Utiliser la fonction HFiltre cochée


    C'est donc à cette table que je voudrais appliquer un filtre me permettant de n'avoir qu'un partie des Personnes. Par contre cette table fait référence au fichier de relation et non au fichier personne et c'est peut-être là mon problème ??

  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
    Dans ce que tu décrit le filtre est appliqué sur les livres et non pas sur les personnes.

    Pour changer le filtre tu dois changer le code de déclaration globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Déclaration globale de FEN_relation_LIVRE_Personne
    PROCEDURE FEN_Relation_LIVRE_Personne()
    // Affichage des enregistrements
    FichierVersEcran()
    // Filtre pour la table des FichierD
    HFiltre(LIVRE_Personne,IDPersonne,Personne.IDPersonne)
    // Valeur de retour par défaut
    MaFenêtre..ValeurRenvoyée = Faux
    A+

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 43
    Points
    43
    Par défaut
    Merci à tous les deux

    Cela fonctionne comme je le souhaitais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Lien entre fichiers sur etat avec requete integree
    Par L.Lemarchand dans le forum WinDev
    Réponses: 3
    Dernier message: 01/08/2008, 13h45
  2. Relation entre fichier
    Par oliviervp dans le forum SharePoint
    Réponses: 1
    Dernier message: 22/07/2008, 11h26
  3. relation entre 2 fichier JS
    Par grinder59 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/06/2007, 23h00
  4. relation entre handle te fichier
    Par ouadie99 dans le forum Delphi
    Réponses: 7
    Dernier message: 17/08/2006, 22h18
  5. relation entre fichier et processus
    Par ouadie99 dans le forum Delphi
    Réponses: 1
    Dernier message: 16/08/2006, 21h11

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