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 :

Remplir une table par itération


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Remplir une table par itération
    Bonjour à toutes et à tous.

    Je suis nouveau sur le forum, et par curiosité je découvre WINDEV 17 .
    Je commence donc par une chose simple : créer une table de multiplication pour me faire la main, et bien sûr, hé bien, je cale...

    Ma table comporte 3 colonnes :
    une colonne nombre (qui est mon indice dans le code)
    une colonne multiplicateur (SAI_Multiplicateur)
    une colonne résultat

    Mon code coince à la ligne TableAjoute:

    POUR indice = 1 _A_ SAI_Profondeur..ValeurAffichée
    TableAjoute(TABLE_Multi,indice +TAB +SAI_Multiplicateur..ValeurAffichée +TAB +(SAI_Profondeur..ValeurAffichée*SAI_Multiplicateur..ValeurAffichée))


    FIN
    Pourriez vous aider un pauvre petit débutant, s'il vous plaît ?

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

    Pour info, l'aide de TableAjoute précise :
    Remarques :

    Il est conseillé d'utiliser la fonction TableAjouteLigne. La fonction TableAjouteLigne permet d'ajouter :
    des caractères TAB dans les colonnes,
    des valeurs de n'importe quel type dans les colonnes.
    Autant prendre les bonnes habitudes d'emblée.

    Quant à votre problème, la ligne que vous ajoutez doit être sous la forme d'une chaîne de caractères.
    <Ligne> : Chaîne de caractères optionnelle
    Ligne à ajouter dans la table spécifiée. Cette ligne est de la forme :
    <Elément Colonne1> + TAB + <Elément Colonne2> + TAB + ...
    Un exemple de code pris dans l'aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResAjout = TableAjoute(TABLE_TableClient, "Dubois" + TAB + "Pierre" + TAB + "21/06/72")
    Je suppose que ceci vous aidera.
    A l'avenir, il serait mieux de préciser le message d'erreur que vous recevez ou ce qui vous pose problème.


    Hemgé

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bonjour Hemgé,

    Merci de m'avoir répondu.

    Avant de demander de l'aide sur le forum, j'avais bien sûr parcouru l'aide Windev, et effectué quelques petits exercices pratiques.

    J'arrive à remplir une table ligne par ligne, avec la fonction Table ou TableAjouteLigne.

    Là où mon code coince, c'est pour l'itération. je voudrais remplir plusieurs lignes d'un coup.
    Et mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableAjouteLigne(TABLE_Multi,indice +TAB +SAI_Multiplicateur..ValeurAffichée +TAB +(SAI_Profondeur..ValeurAffichée*SAI_Multiplicateur..ValeurAffichée))
    me renvoie également un message d'erreur :

    Erreur à la ligne 4 du traitement Clic sur BTN_Calcul.
    L'opération '*' interdite entre un élément de type 'chaîne ANSI' et un élément de type 'chaîne ANSI'.

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

    Projet : EXPRESS_TP2

    Appel WL :
    Traitement de 'Clic sur BTN_Calcul' (EXPRESS_FEN_table_multiplication.BTN_Calcul), ligne 4, thread 0

    Que s'est-il passé ?
    L'opération '*' interdite entre un élément de type 'chaîne ANSI' et un élément de type 'chaîne ANSI'.

    Code erreur : 1036
    Alors, que faire pour ne pas utiliser l'opérande "*" dans une table de multiplication ?
    Merci d'avance.

    JB

  4. #4
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    bonjour,

    TableAjouteLigne(TABLE_Multi,indice +TAB +SAI_Multiplicateur..ValeurAffichée +TAB +Val(SAI_Profondeur..ValeurAffichée*SAI_Multiplicateur..ValeurAffichée))
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bonjour Mirisepage,

    Merci de me mettre sur la voie.
    Ton code me renvoie le même message d'erreur. Mais je commence à comprendre : la fonction val donne une valeur numérique à une chaîne.

    J'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableAjouteLigne(TABLE_Multi,indice +TAB +SAI_Multiplicateur..ValeurAffichée +TAB +(Val(SAI_Profondeur..ValeurAffichée)*Val(SAI_Multiplicateur..ValeurAffichée)))
    Là, il n'y a plus d'erreur, la colonne Nombre (celle qui est indicée) se remplit bien. Mais les colonnes SAI_Multiplicateur, et la dernière (la multiplication) se remplissent de zéros.

    Je continue à chercher.

    Merci encore.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    J'ai enfin trouvé, il faut utiliser la fonction TableAjoute (et non pas tableAjouteLigne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    POUR indice = 1 _A_ SAI_Profondeur..ValeurAffichée
    	TableAjoute(TABLE_Multi,indice +TAB +SAI_Multiplicateur..ValeurAffichée  +TAB +Val(SAI_Multiplicateur..ValeurAffichée)*indice)
    Là, ça marche.
    Merci à tous pour m'avoir mis sur la voie.

    JB

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    Par défaut
    D'après ce que je comprends, tu as 2 champs en saisi sur ta fenêtre (SAI_Profondeur et SAI_Multiplicateur) ainsi qu'une table que tu veux remplir (si possible avec autre chose que des zéros).

    si tu remplis ta table avant que SAI_Multiplicateur ne soit remplit alors, SAI_Multiplicateur vaut 0, donc ta table se remplit de 0.

    A noter au passage, que ta multiplication est SAI_Profondeur * SAI_Multiplicateur (pas utile de rajouter ..valeurAffiché sauf si se sont des listes déroulantes)
    D'après ce que j'ai compris, ces valeurs sont fixes à chaque fois que tu décide de remplir ta table donc le résultat de l'opération sera toujours le même.
    Je pense que l'opération souhaitée est indice * SAI_Multiplicateur

    Il y a 2 fonction très utile à connaitre pour résoudre ces problèmes. Ce sont les fonctions "Trace()" et "Info()".
    Chacune d'elle accepte un nombre infini (ou presque) de paramétre et elle permette d'afficher ces paramétres à l'écran.
    La fonction trace, ne bloque pas le programme au contraire de la fonction "Info" qui est une message box (bouton "OK").

    Autre chose à connaître, ce sont les points d'arrêts.
    Dans l'éditeur de code, tu te positionne sur la ligne "TableAjoute..." et tu presses les touches Ctrl+B, la ligne commencera alors un point rouge.
    Lorsque tu lanceras ton programme à partir de Windev, le programme se stopera lorsqu'il passera à cet endroit et te permettra de suivre l'exécution du traitement pas à pas (avec la touche F8 notamment).
    De même, à ce moment là (c'est-à-dire lorsque tu es en débugage), tu peux passer la souris sur une variable de ton code pour en connaître la valeur via une bulle d'aide.

  8. #8
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    pardon, j'étais un peu pressé, j'ai mis alors val(.....) sans faire attention, mais le principe est là. Bon dev.
    N'oubliez pas de cliquer sur
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  9. #9
    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
    Vous devez relire la syntaxe des deux instructions : TableAjoute et TableAjouteLigne.

    TableAjoute
    <Résultat> = TableAjoute(<Nom de la table> [, <Ligne>])
    --------------------------------------------------------------------------------
    ...
    <Ligne> : Chaîne de caractères optionnelle
    Ligne à ajouter dans la table spécifiée. Cette ligne est de la forme :
    <Elément Colonne1> + TAB + <Elément Colonne2> + TAB + ...
    Le caractère TAB est utilisé comme séparateur, dans la chaîne de caractères (= ligne) qui rassemble toutes les valeurs à ajouter.

    TableAjouteLigne
    <Résultat> = TableAjouteLigne(<Nom de la table> [, <Élément colonne 1> [ ... [, <Élément colonne N>]])

    --------------------------------------------------------------------------------
    ...
    <Élément colonne 1> : Type de la colonne associée (optionnel)
    Éléments de la ligne à ajouter dans la table spécifiée. Chaque élément correspond à une colonne dans la table. Le type de l'élément ajouté doit être compatible avec le type de la colonne concernée.
    Élément colonne N> : Type de la colonne associée (optionnel)
    Éléments de la ligne à ajouter dans la table spécifiée. Chaque élément correspond à une colonne dans la table. Le type de l'élément ajouté doit être compatible avec le type de la colonne concernée.
    Si aucun de ces paramètres n'est spécifié, une ligne vide est ajoutée dans la table. Pour une table fichier, les valeurs par défaut définies dans le fichier lié sont prises en compte.
    Les éléments à ajouter sont séparés par une virgule et non par le caractère TAB.
    Ce qui renvoie d'ailleurs à la remarque que je vous avais également mise en copie tout à l'heure et qui conseille de recourir à TableAjouteLigne, notamment parce qu'on peut ajouter des caractères TAB dans les colonnes.

    Quand vous avez deux instructions censées pouvoir faire le même job, si cela va avec l'une et pas avec l'autre, l'erreur est chez vous et pas dans l'instruction. Cela veut dire que vous manipulez incorrectement cette instruction.
    Et, surtout si vous en êtes au stade de l'apprentissage, reprenez l'aide et ses exemples et creusez tant qu'il le faudra pour maîtriser cette instruction récalcitrante.
    Après cela, ce sera pour l'éternité (enfin, si vous vivez jusque là !)

    Bon courage

    Hemgé

    N'oubliez pas de cocher [Résolu]

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bonsoir à tous.

    @ErwanA : merci pour les conseils. Info, je connaissais et je m'en suis servi pour trouver la solution.
    Trace, je connaissais pas. Je le garde sous le coude. Les points d'arrêt, c'est comme le vba de microsoft, je ne les utilise pas assez.
    Merci pour tous ces conseils.

    @Hemgé :
    Quand vous avez deux instructions censées pouvoir faire le même job, si cela va avec l'une et pas avec l'autre, l'erreur est chez vous et pas dans l'instruction. Cela veut dire que vous manipulez incorrectement cette instruction.
    Je me doute bien que l'erreur vient de chez moi ! J'ai 45 minutes d'expérience de Windev...et suis parfaitement lucide...Mon seul atout est que je maîtrise assez bien le vba, et que le principe est le même.
    (Dans 13GIBE59, 13 c'est le département, et 59 ma date de naissance...)
    Merci également pour cet éclairage didactique.

    Bonne soirée.
    Prochaine étape pour moi : les bases hyperfile...

  11. #11
    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
    Je me doute bien que l'erreur vient de chez moi ! J'ai 45 minutes d'expérience de Windev...et suis parfaitement lucide...Mon seul atout est que je maîtrise assez bien le vba, et que le principe est le même.
    Bienvenue dans la communauté Windev...
    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.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bonjour laurent.

    Bienvenue dans la communauté Windev..
    Merci beaucoup !

    JB

  13. #13
    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
    Citation Envoyé par 13GIBE59 Voir le message
    J'ai enfin trouvé, il faut utiliser la fonction TableAjoute (et non pas tableAjouteLigne) :

    JB
    C'est en réponse à ceci que je relevais que l'erreur était chez vous, de manière qu'un futur lecteur ne croie pas qu'une instruction était plus adéquate que l'autre et est à privilégier (hors le conseil repris dans l'aide).

    Bonne journée

    Hemgé

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

Discussions similaires

  1. [WD16] Remplir une table par une autre
    Par jujurochedu42 dans le forum WinDev
    Réponses: 1
    Dernier message: 20/06/2012, 16h12
  2. Réponses: 5
    Dernier message: 05/04/2012, 22h06
  3. [WD14] Remplir une Table par programmation
    Par nordinen dans le forum WinDev
    Réponses: 1
    Dernier message: 01/04/2011, 19h25
  4. [MySQL] Remplir une table par une autre
    Par AmisNoob dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/06/2009, 04h23
  5. remplir une table par VBA
    Par gwen_oc dans le forum Access
    Réponses: 3
    Dernier message: 22/02/2007, 15h04

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