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 :

comment créer des colonnes d'une table verticale par programmation?


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    TIEMELEKRO
    Inscrit en
    Janvier 2015
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : TIEMELEKRO
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 207
    Points : 0
    Points
    0
    Par défaut comment créer des colonnes d'une table verticale par programmation?
    Bonsoir cher tous. J'ai un souci et j'ai besoin d'aide.
    j'ai un fichier "Notes" qui a pour clé étrangère "IDMatières" du fichier "Matières".
    J'ai une FEN_Saisie_Notes qui me permet de saisir les notes de mes élèves dans la TABLE_Notes(table verticale remplie par programmation). Dans cette table s'affiche la liste des mes élèves(Matricule,Nom,Prénom) COL_Matricule,COL_Nom,COL_Prenom (TableAjouteLigne). Après COL_Prenom, je souhaiterais que s'affiche pour chaque matière, une colonne avec pour pour entête le nom ou l'ID de la matière.

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 813
    Points : 5 273
    Points
    5 273
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    En gros tu passes dans ce que j'appelle le "mode tableur" qui va rapidement devenir inutilisable.
    Pourquoi ne pas utiliser un champ table avec ruptures (sur l'élève et sur la matière), ou mieux utiliser la fenêtre de l'élève avec un champ onglet avec un volet statique qui comporte les données administratives et des volets dynamiques (1 par années scolaire) dans lequel tu placeras un champ table avec une rupture sur la matière.Nom : screenshot_30-03-2021 06h08_n°01.png
Affichages : 123
Taille : 55,7 Ko
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 065
    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 065
    Points : 9 411
    Points
    9 411
    Par défaut
    ChampClone() permet d'ajouter des colonnes à une table. J'utilise régulièrement, et je trouve que c'est assez utililisable, pour une table qui va AFFICHER des résultats.
    Si la table est en saisie, et qu'on doit exploiter ce qui a été saisi ... oui, je comprends tes réserves.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 813
    Points : 5 273
    Points
    5 273
    Billets dans le blog
    1
    Par défaut
    J'ai bien l'impression que c'est l'exhumation de ce projet
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Une autre solution serait d'utiliser une fenêtre interne de détail d'une ligne de la table permettant d'afficher ce que tu souhaites...

  6. #6
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Le champ tableau croisé dynamique peut être une solution...

    Ou bien en faisant un requête qui modifie ses colonnes selon besoin...
    Ici j'ai fait la somme des notes des élèves par matière, tu peux pareil faire un calcul des moyennes

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    sREQ_Col_Matiere est une chaîne
    sdREQ_Col_Matiere est une Source de Données
     
    sREQ_Note_Eleve_Matiere est une chaîne
    sdREQ_Note_Eleve_Matiere est une Source de Données
     
    //---------------------------
    // Requête liste des matières
    //---------------------------
    sREQ_Col_Matiere = [
    SELECT DISTINCT 
    	Notes.IDMatiere AS IDMatiere, 
    	Matieres.Matiere AS Matiere
    FROM 
    	Notes
    	INNER JOIN Matieres
    		ON Notes.IDMatiere = Matieres.IDMatiere
    ORDER BY 
    	IDMatiere ASC
    ]
     
    HExécuteRequêteSQL(sdREQ_Col_Matiere,sREQ_Col_Matiere)
     
    //-----------------------
    // Requête tableau croisé
    //-----------------------
    // Début de la requête
    sREQ_Note_Eleve_Matiere = [
    SELECT 
    	Eleves.Matricule AS Matricule,  
    	Eleves.Nom AS Nom,  
    	Eleves.Prenom AS Prenom,
    ]
    // Colonne des matière en fonction des matières trouvées dans la requête précédente
    HLitPremier(sdREQ_Col_Matiere)
    TANTQUE PAS HEnDehors(sdREQ_Col_Matiere)
    	sREQ_Note_Eleve_Matiere += [","] + RC + TAB + "SUM(CASE WHEN Notes.IDMatiere = " + sdREQ_Col_Matiere.IDMatiere + " THEN Notes.Note ELSE 0 END) AS [" +  sdREQ_Col_Matiere.Matiere  + "]"
    	HLitSuivant(sdREQ_Col_Matiere)
    FIN
    // Fin de la requête 
    sREQ_Note_Eleve_Matiere += RC + [
    FROM 
    	Eleves
    	LEFT OUTER JOIN Notes
    		ON 	Eleves.IDEleve = Notes.IDEleve
    GROUP BY Matricule,Nom,Prenom
    ]
     
    HExécuteRequêteSQL(sdREQ_Note_Eleve_Matiere,hRequêteSansCorrectionHF,sREQ_Note_Eleve_Matiere)
     
    // envoi le résultat de la requête tableau croisé dans un champ table Données/Requête (onglet contenu)
    ConstruitTableFichier(TABLE_SansNom1,sdREQ_Note_Eleve_Matiere)
    Pense à mettre que la table est remplie par Fichier/Requête (pas par programmation)
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/07/2017, 11h52
  2. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  3. [WD11] comment inserer automatiquement des colonnes dans une table
    Par incomparable dans le forum WinDev
    Réponses: 3
    Dernier message: 31/08/2009, 13h51
  4. Réponses: 3
    Dernier message: 18/12/2008, 15h46
  5. Réponses: 1
    Dernier message: 22/12/2005, 09h03

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