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 :

Enregistrer les clones d'une colonne [WD20]


Sujet :

WinDev

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Enregistrer les clones d'une colonne
    Bonjour,
    je suis débutant en programmation Windev
    d'abord un 1er utilisateur doit créer lui même ses propres rubriques qui seront affichés automatiquement dans des colonnes cloné d'une table
    ensuite un 2e utilisateur doit faire un choix en cochant l'une des rubriques affichés
    j'ai d'abord crée une colonne de type interrupteur.
    J'ai utilisé par programmation, la fonction champclone pour cloner la colonne ( COL_Rubrique) afin que les rubrique autres s'affichent.
    ça marche très bien, mais mon soucis est que je veux enregistrer dans ma BD l'une des clones (de type interrupteur) que l'utilisateur cochera. Et je ne sais pas comment m'y prendre.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Lesotho

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    Tu crées un champ booléen et t'affectes le contenu de ta colonne dessus
    Espérant t'avoir secouru

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour merci j'ai déjà essayer mais il m'affiche une erreur de code , voici mon code clic sur bouton valider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonnePresent",i}

  4. #4
    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
    Moi , je n'ai rien compris à la question, mais au vu de ce code, j'ai une piste.

    La syntaxe : Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonnePresent",i}

    n'existe pas.

    Si à la place de i, tu mets indchamp, alors la syntaxe devient correcte.
    J'imagine que tu veux prendre la ligne i dans la table TABLE_REQ_Liste.
    Alors c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Rubrique.ValeurRubrique=TABLE_REQ_Liste.ColonnePresent[i]
    ou encore, si tu veux passer par les indirections :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonnePresent",indchamp}[i]
    Mais en général , avec les indirections, on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sch est une chaine
    sch = ... un truuc variable 
    rubrique = {ch, indchamp}[i]
    Si ch est fixe, il n'y a strictement aucun intérêt à passer par l'indirection
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour au fait j'ai utiliser la fonction champclone pour cloner une colonne Rubrique en interrupteur (voir capture) Nom : 1.png
Affichages : 473
Taille : 285,3 Ko
    voici le code initialisation de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    i est un entier
    POUR i=1 A HNbEnr(Rubrique)
    	//Ajouter la nouvelle colonne
    	ChampClone(TABLE_REQ_Liste.COL_Rubrique,"ColonneAhonon"+i)
    	//  changer le libellé
    	{"TABLE_REQ_Liste.ColonneAhonon"+i}..Libellé = "Postion "+i
    	// rendre visible
    	{"TABLE_REQ_Liste.ColonneAhonon"+i}..Visible = Vrai
     
    FIN
    et ça donne ceci a l’exécution (voir 2e image)
    Nom : 2.png
Affichages : 443
Taille : 189,1 Ko
    et maintenant je n'arrive pas à récupérer la valeur des colonnes clones pour l'envoyer dans ma BD
    j'ai bien essayer la methode de tbc92
    voici le code clic sur bouton valider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    i est un entier
    	POUR i=1 A TableOccurrence(TABLE_REQ_Liste)
     
    		Matricule=TABLE_REQ_Liste.COL_Matricule[i]
    		Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonneAhonon",indChamp}[i]
                    Rubrique.ValeurRubrique=TABLE_REQ_Liste.COL_Rubrique[i]
     
    		HAjoute(Rubrique)
     
     
    	FIN
    les codes fonctionnent sauf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonneAhonon",indChamp}[i]
    que Windev signale une erreur a sa ligne

  6. #6
    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,

    Comme toujours, quel est le message d'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rubrique.ValeurRubrique={"TABLE_REQ_Liste.ColonneAhonon",indChamp}[i]
    Il semble que le nom de la colonne n'est pas ColonneAhonon, mais "Nom", "AHONON" étant la valeur de cette colonne pour la première ligne affichée dans votre exemple.

    Accessoirement, il est conseillé d'utiliser ChampClone dans l'initialisation de l fenêtre plutôt que dans l'initialisation du champ.

    Hemgé

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour Hemgé au fait mon objectif est que si il coche par exemple la colonne "position1" ou "position2" je puisse enregistrer la valeur dans ma BD mais puisque c'est une colonne cloné a partir de la colonne "Rubrique" je ne peut pas utiliser le format Champ1=Valeur1
    voici le message d'erreur:
    Erreur à la ligne 11 du traitement Clic sur BTN_Valider.
    Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.

    ----- Informations techniques -----

    Projet : Projet_Gestion_SPA_GN

    Appel WL :
    Traitement de 'Clic sur BTN_Valider' (FEN_enreg_Spa.BTN_Valider), ligne 11, thread 0

    Que s'est-il passé ?
    Un champ n'a pas de sous-élément. L'opérateur '.' est interdit.

    Code erreur : 1069
    Niveau : erreur fatale (EL_FATAL)

  8. #8
    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,
    Pour accéder à une colonne clonée, tu as déjà la bonne syntaxe dans ton premier code:
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"TABLE_REQ_Liste.ColonneAhonon"+i}
    Tu peux donc simplifier ton code en parcourant la table avec un POUR TOUT, ainsi tu n'as plus de numéro de ligne à spécifier:
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    POUR TOUTE LIGNE DE TABLE_REQ_Liste
    	trace({"TABLE_REQ_Liste.ColonneAhonon"+1,indchamp})
    FIN
    ici j'ai mis le "numéro" de la colonne en dur, mais il est tout à fait possible de remplacer cette valeur par une variable.

    Tatayo

  9. #9
    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
    Pour corriger un petit détail dans le message de Tatayo, notre ami faisait {"TABLE_REQ_Liste.ColonneAhonon",i} et non {"TABLE_REQ_Liste.ColonneAhonon"+i}
    Virgule ou Plus, ce n'est pas pareil.

    Pour revenir aux fondamentaux :
    Tu exécutes cette commande : ChampClone(TABLE_REQ_Liste.COL_Rubrique,"ColonneAhonon"+i)

    Parfait, ça marche.

    Je vais la réécrire différemment, en décomposant, juste pour le coté pédagogique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sNom_Nouvelle colonne , sNom_complet   est une chaine 
    i est un entier 
    POUR i=1 _A_ HNbEnr(Rubrique)  // Note le _A_ au lieu de A ... 
    	//Ajouter la nouvelle colonne
            sNom_nouvelle_colonne = "ColonneAhonon"+i                                // ici, le + est une concaténation de chaines
            trace  (    "  Création d'une nouvelle colonne " + sNom_nouvelle_colonne )              // juste pour afficher ce qui se passe.
    	ChampClone(TABLE_REQ_Liste.COL_Rubrique,  sNom_nouvelle_colonne)
    	//  changer le libellé
            sNom_Complet = "TABLE_REQ_Liste."+sNom_nouvelle_colonne  // ici aussi, le + est une concaténation de chaines
    	{sNom_Complet , indchamp }..Libellé = "Postion "+i      // C'est conesillé de préciser indchamp, ça permet d'accélérer le traitement.
    	// rendre visible
    	{sNom_Complet   , indchamp}..Visible = Vrai
     fin
    On construit donc une chaine de caractères avec le nom de ce qu'on veut manipuler, puis on utilise ce nom de chaîne.
    Un avantage, c'est que ça limite les fautes de frappe ; les erreurs sont détectées à la compilation, et non à l'exécution.


    Ensuite, pour aller lire le contenu de ces colonnes clonées, il faut faire pareil : il faut bâtir une chaîne, qui va contenir "ColonneAhonon1" ou "ColonneAhonon2" , et via cette chaine, on ira chercher le contenu de la colonne voulue.
    Actuellement, tu cherches le contenue de la colonne qui s'appelle "ColonneAhonon", or aucune colonne ne porte ce nom.

    La partie CLONAGE de champ est assez compliquée, il faut un peu de capacité à travailler sur des concepts abstraits pour la comprendre, mais tout ceci est bien expliqué dans la documentation.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  10. #10
    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
    Quand je parlais du "premier code", je faisais référence au message d'aujourd'hui, dans le code qui clone les colonnes.
    L'affectation du libelle à la colonne clonée utilise la bonne syntaxe... tout comme la ligne qui rend la colonne visible.
    J'avoue que je devrais être "un peu" plus précis.

    Tatayo.

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    merci tbc92 c'est le même clonage mais avec une programmation un peu longue j'ai essayer et ça passe bien
    mais pour le contenu de ces colonnes clonées j'ai bien établis la chaîne mais je n'arrive toujours pas a affecter le contenu du clone c'est ça mon soucis donc si tu peux m'aider avec une code...

  12. #12
    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 faut en dire plus. Comment fais-tu pour modifier le contenu d'une colonne 'normale' ?

    Il y a plusieurs options. Et pour que je te propose un code qui s'intègre correctement dans ce que tu fais, il faut savoir comment ton code est organisé.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bon pour une colonne normale pour récupérer la valeur je fais par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rubrique.ValeurRubrique=TABLE_REQ_Liste.COL_Rubrique[i]
    mais pour la colonne cloné c'est un autre cas, puisqu'elle n'existe qu'a l’exécution de la fenêtre. donc je cherche juste une fonction ou code qui va me permettre de récupérer la valeur du clone crée.

  14. #14
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Rubrique.ValeurRubrique=TABLE_REQ_Liste.COL_Rubrique[i]
    Dans cette commande, i est bien un numéro de ligne ? C'est ça ?

    Alors, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ncol , j, i est un entier 
    ncol = tableoccurrence( table_req_liste, 2)   // 2 pour avoir le nombre de colonnes de la table, à vérifier.
     
    i = 1 // pour traiter la 1ere ligne
    pour j = 1 a n
      trace ( TABLE_REQ_Liste.COL_Rubrique[i,j] )
    fin
    Cette boucle affiche le contenu d'une ligne de la table ( i =1 : 1ère ligne) , colonne par colonne, y compris les colonnes créées par champclone().
    On n'utilise pas les indirections, on pointe directement vers la cellule voulue.
    C'est plus simple que la syntaxe avec les indirections, sauf cas très tordu.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  15. #15
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bonjour,
    tbc92 merci pour ton aide effectivement c'est un peut ça mais je devais juste lui dire de compter le nombre de colonne et ensuite affiché ça avec la fonction trace
    merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2010, 12h06
  2. Réponses: 4
    Dernier message: 22/07/2008, 16h14
  3. retrouver les contraintes sur une colonne
    Par kalari dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2005, 17h03
  4. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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