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 :

TableModifieColonne omettre colonne [WD24]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 121
    Points : 53
    Points
    53
    Par défaut TableModifieColonne omettre colonne
    Bonjour à toutes et à tous,

    J'ai deux champs table dont je compare les ID. Lorsqu'il y a match sur les ID, je voudrais modifier la quatrième colonne de la table comparée avec la troisième colonne de la table de comparaison.

    J'ai fait une boucle pour parcourir toutes les lignes de comparaison et rechercher les ID communs dans comparée. Jusque là pas de problème, je relève les indices des lignes pour chaque table avec ID commun.
    J'ai fait des "Trace" pour vérifier les valeurs.

    Code WINDEV : 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
     
     
    //Rempli table comparée
    ConstruitTableFichier(TABLE_SansNom8, STOCK_INI_2021, taRemplirTable)
    // position dans table comparaison
    nPositionLigne est un entier
    // position trouvée dans table comparée
    nPosTrouvée est un entier
     
    //Dans le champ table comparée je ne comprends pas un problème libellé des colonnes
    //J'ai contourné le problème par ces modifications
    {"TABLE_SansNom8._COL2"}..Libellé = "TABLE_SansNom8._COL2"
    {"TABLE_SansNom8._COL4"}..Libellé = "TABLE_SansNom8._COL4"
    sNom est une chaîne
    sNom = TableEnumèreColonne(TABLE_SansNom8, 2)
    sNom = {"TABLE_SansNom8."+sNom}..Libellé
    sNom4 est une chaîne
    sNom4 = TableEnumèreColonne(TABLE_SansNom8, 4)
    sNom4 = {"TABLE_SansNom8."+sNom4}..Libellé
    {"TABLE_SansNom8._COL4"}..TypeSaisie = typSaisieMonétaire
    {"TABLE_SansNom8._COL4"}..MasqueAffichage = "999 999 999 999 999,99 €"
     
     
    POUR TOUTE LIGNE nPositionLigne DE TABLE_Import_Plan5
    	nPosTrouvée = TableCherche(sNom, TABLE_Import_Plan5.Colonne2[nPositionLigne], rechercheIdentique)
     
    	SI nPosTrouvée <> 0 ALORS
     
    TableModifieColonne("TABLE_SansNom8", nPosTrouvée, TABLE_Import_Plan5.Colonne3[nPositionLigne])
    	FIN
    FIN

    Ainsi je récupère très bien la valeur que je souhaite de la table comparaison, mais quand il s'agit de modifier la valeur
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableModifieColonne("TABLE_SansNom8", nPosTrouvée, TABLE_Import_Plan5.Colonne3[nPositionLigne])
    Cette valeur se modifie dans la première colonne et non la quatrième. Normale me direz-vous puisque "TABLE_Import_Plan5.Colonne3[nPositionLigne]" est le premier élément.

    Alors j'ai essayé de le mettre en quatrième élément
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableModifieColonne("TABLE_SansNom8", nPosTrouvée,"", "", "", TABLE_Import_Plan5.Colonne3[nPositionLigne])
    Et là impeccable la valeur se mets bien dans la quatrième colonne, mais les trois autres ont été modifiée par un beau 0.

    J'ai essayé
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NbrColonne = TableModifieColonne(TABLE_SansNom8)
    sNom4[NbrColonne] = TABLE_Import_Plan5.Colonne3[nPositionLigne]
    Comme pour un tableajouteligne, mais ça ne fonctionne pas plus.

    Si quelqu'un pouvait m'orienter vers la bonne façon de faire.

    Merci

    Gregus

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    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 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Ces champs tables sont-ils "réellement" utilisés ou ne servent-ils que de tampons pour ta comparaison ?
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 121
    Points : 53
    Points
    53
    Par défaut
    Bonjour Voroltinquo,

    Je pourrais me passer de deux, même si les données proviennent d'un fichier de données et que je suis passé par un ConstruitTableFichier, mais il faut que je conserve l'ID qui sert pour la comparaison.

    Je ne sais si tu connais la ou une solution, mais ta question a allumé certaine ampoule.

    Une idée qui me vient serait de déplacer la colonne dans le champ table comparée pour la mettre en premier?

    Merci

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    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 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas travailler avec des tableaux de structures ou de classes ?
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    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 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Je ne connaissais pas cette fonction TableModifieColonne(). Elle doit pouvoir être utile dans certaines circonstances, mais de façons très exceptionnelle.
    Oublie cette fonction.
    Elle a été introduite en version 12 .... on devait forcément pouvoir modifier le contenu d'une table avant la version 12.

    Je n'arrive pas à identifier clairement quelle table doit être modifiée dans ton histoire.

    Pour écrire la valeur "A" dans la 5ème ligne, 4ème colonne d'une table TAB0, la syntaxe est : TAB0[5,4]= "A"
    Je pense qu'avec cette information, tu devrais t'en sortir.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 121
    Points : 53
    Points
    53
    Par défaut
    Il y a des choses qui sont si simples à faire.

    Pardonnez mon amateurisme et mon niveau débutant.

    Merci à tbc92 qui m'a apporté la solution à mettre en œuvre.
    Citation Envoyé par tbc92 Voir le message
    Pour écrire la valeur "A" dans la 5ème ligne, 4ème colonne d'une table TAB0, la syntaxe est : TAB0[5,4]= "A"
    Je pense qu'avec cette information, tu devrais t'en sortir.
    J'ai utilisé deux variables pour les lignes de chaque champ table et utilisé l'indice des colonnes.
    J'obtiens bien le résultat que je voulais.

    En revanche
    Citation Envoyé par Voroltinquo Voir le message
    Pourquoi ne pas travailler avec des tableaux de structures ou de classes ?
    Je ne sais pas ce que c'est, ni comment cela fonctionne. J'ai déjà quelque truc sur le feux niveau apprentissage, notamment avec une discussion sur les "Jauges", mais je vais me documenter pour voir de quoi il s'agit.

    Merci à tous les deux pour vos réponses

    Gregus

  7. #7
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Alors pour répondre à la question, l'erreur vient de l'utilisation de l'indice sur le mauvais élément.

    il faut utilisé l'indice sur la table pour récuprer la "ligne" complète. Ensuite on peux utilisé le suffix pour récupérer la "cellule" de la colonne voulue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TABLE_SansNom8[nPosTrouvée]._COL2 = TABLE_Import_Plan5[nPositionLigne].Colonne3
    Sinon comme le fait remarquer Voroltinquo: ne pas utiliser des champs (table ou autre) si il ne servent que à faire des traitements cachés.
    Mauvais habitude qui, je vois, semble assez commune

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    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 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Pour compléter le message de Yoshi,
    Le champ table, c'est un champ dédié à l'affichage. Le système d'exploitation va consommer quelques centièmes de seconde pour trouver la bonne information au bon endroit, et il va bouffer des dixièmes de secondes pour afficher tout ça à l'écran. Et tout ça,répété pour chaque cas à modifier.
    Le temps de traitement va être multiplié par 10, pour gérer l'affichage.

    Ceci dit, Gregus est inscrit depuis 8 ans, j'imagine qu'il fait de la programmation à peu près 3 heures tous les trimestres. Donc, les questions de performance, çe ne doit pas vraiment l'intéresser !
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

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

Discussions similaires

  1. Cryptage de colonnes sous Oracle
    Par Julian Roblin dans le forum SQL
    Réponses: 9
    Dernier message: 28/11/2006, 18h24
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. Dimensions des colonnes d'un TDBGrid
    Par osmose22 dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/12/2002, 11h27
  4. JBuilder7 & JTable Colonne alignement
    Par Tonton Luc dans le forum JBuilder
    Réponses: 5
    Dernier message: 06/11/2002, 17h32
  5. StringGrid et colonnes
    Par Delph dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/08/2002, 11h35

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