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 :

Ajout ligne dans table par programmation [WD19]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Par défaut Ajout ligne dans table par programmation
    Bonjour,

    J'aimerais savoir s'il existe une autre méthode que Tableajouteligne("table","champ1","champ2"etc..) car j'ai pas mal de champ avec des noms compliqués et c'est illisible...
    je préférerai un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tantque pas Hendehors("requete")
      table.COL1=requete.champ1
      table.COL2=requete.champ2
      ...
      tableajouteligne("table")
      hlitsuivant
    fin
    ainsi je peux voir beaucoup plus clairement quel champ de la requête est attribué à quelle colonne.
    cette solution ne fonctionne pas car j'ai une seule ligne dans la table, qui est la dernière ligne de la requête parcourue...
    mais je pense que cela doit-être possible malgré que je n'ai rien trouvé sur le net.

    quelqu'un a-t-il une solution ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 179
    Par défaut
    Bonsoir,

    Vous pouvez très simplement ajouter une ligne vide, en récupérant son indice, puis remplir chaque colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Indice est entier
    POUR TOUT requete
       Indice = tableajouteligne(table)
       table.COL1[Indice] = requete.champ1
       table.COL2[Indice] = requete.champ2
       ...
    FIN

  3. #3
    Membre Expert
    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
    Par défaut
    Bonsoir,

    D'une part, vous pourriez déjà attribuer des alias simples aux colonnes de votre requête.

    D'autre part, voyez du côté des Tables sur source.
    Vous établissez la liaison entre vos colonnes de table et les colonnes de votre requête, soit via la fenêtre de description du champ Table, soit via programmation.
    Cela fait, il vous suffit de parcourir votre requête et d'utiliser TableAffiche après la lecture de chaque ligne de votre requête.

    Bon travail

    Hemgé

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Par défaut
    Merci pour vos réponses.

    Themayu,

    je vais tester ta solution cela à l'air simple et efficace.

    Hemgé,

    les alias ne sont pas évident dans mon cas car j'attaque un AS400 par des requetes SQL en odbc qui sont déjà très chargées.
    Ta solution semble interessante mais les tables sur source sont faites pour faire une liaison avec un fichier, tableau ou classe.
    je ne vois pas trop comment faire avec une requête, pourrais tu me montrer un bref bout de code mettant cela en oeuvre ?

    Merci pour votre aide précieuse !

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Il y a beaucoup plus simple: ConstruitTableFichier(). WinDev s'occupe de créer les colonnes dans la table et de les lier aux rubriques de la requête.

    Tatayo.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Bonsoir,

    D'une part, vous pourriez déjà attribuer des alias simples aux colonnes de votre requête.

    D'autre part, voyez du côté des Tables sur source.
    Vous établissez la liaison entre vos colonnes de table et les colonnes de votre requête, soit via la fenêtre de description du champ Table, soit via programmation.
    Cela fait, il vous suffit de parcourir votre requête et d'utiliser TableAffiche après la lecture de chaque ligne de votre requête.

    Bon travail

    Hemgé
    Hemgé, j'ai essayé votre solution mais ma table ne se remplit pas. A la lecture de l'aide je ne vois pas de possibilité avec les requêtes, voici le code que je fait par analogie à l'aide et ce que vous m'avez dit : (sdSrcReq est ma source de donnée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    HExécuteRequêteSQL(sdSrcReq,"TEST",hRequêteSansCorrection,sReq)
     
    TABLE_test..FichierParcouru=sdSrcReq
    TABLE_test..RubriqueMémorisée=sdSrcReq.ZRCANA
    TABLE_test.COL_CodeAna..LiaisonFichier=sdSrcReq.ZRCANA
    TABLE_test.COL_Date_fin..LiaisonFichier=sdSrcReq.ZHDHIS
    TABLE_test.COL_Dossier..LiaisonFichier=sdSrcReq.ZHNDOS
    TABLE_test.COL_Nom..LiaisonFichier=sdSrcReq.PTZNOM
     
    POUR TOUT sdSrcReq
    	 TableAffiche(TABLE_test)
    FIN

  7. #7
    Membre Expert
    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
    Par défaut
    Bonjour,

    Je suis désolé, mais j'ai été moins que clair et franchement mauvais. Je mérite un pouce vers le bas.
    Il n'était pourtant pas si tard !
    Oubliez cela : il faut déclarer une structure, puis un tableau de cette structure etc.. pas la simplicité que vous souhaitiez.

    Par contre, en parallèle à ConstruitTableFichier() proposé par Tatayo, il y a FichierVersTableMémoire().
    Et il y a eu, il y a quelques mois, une discussion comparative sur les deux fonctions .

    Bon travail

    Hemgé

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Par défaut
    C'est bien ce qu'il me semblait

    en effet fichierVersTableMémoire va permettre de conserver le nom des colonnes qu'on aura choisi dans la table mais cela implique de les mettre dans le même ordre dans la requête...

    donc pour récapituler si on a pas d'ordre particulier et qu'on veut voir clairement dans le code quelle colonne est attribué à quelle rubrique la solution de Romanops me semble la mieux (cela est valable lorsque le nom des colonnes de la table n'ont pas le même nom que celle de la requête, ce qui était le cas pour moi).

    Si on veut utiliser les noms des rubriques de la requête comme noms des colonnes de la table, dans le même ordre que la requête, ConstruitTableFichier est idéal.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 179
    Par défaut
    Vous pouvez faire du databinding programmé en adaptant un peu le code pour que cela en fonctionne, exemple testé avec WD18 :

    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
    // Avec un fichier HF "Test1" comprenant les rubriques "Ch_1"; "Ch_2"; "Ch_3"
    // Une table TABLE_TEST, avec dans l'onglet contenu la case "Fichier/Reqête" sélectionné et le sélecteur Fichier parcouru <aucun>
    
    // Création de la source de donnée
    IdRequête est chaîne = DonneGUID(guidBrut)
    SdSrc est une Source de Données = IdRequête
    
    Req est chaîne = "SELECT Test1.Ch_1, Test1.Ch_2, Test1.Ch_3 FROM Test1"
    
    // Affectation du databinding
    TABLE_TEST..FichierParcouru = IdRequête
    TABLE_TEST.COL_CH1..LiaisonFichier = IdRequête + ".Ch_1"
    TABLE_TEST.COL_CH2..LiaisonFichier = IdRequête + ".Ch_2"
    TABLE_TEST.COL_CH3..LiaisonFichier = IdRequête + ".Ch_3"
    
    SI HExécuteRequêteSQL(SdSrc,hRequêteDéfaut,Req) ALORS
    	TableAffiche(TABLE_TEST)
    FIN
    
    HLibèreRequête(IdRequête)

    Pour l'utilisation du TableAjouteLigne sans paramètre, j'ai pris l'habitude (bonne ou mauvaise) de faire comme ça sur les tables qui sont susceptibles d'évoluer au cours du développement et ou avec des éléments ou une mise en forme (couleur, icône sur une ligne) déterminés à l'affichage. L'avantage est que la partie code est totalement séparée de la partie conception graphique de la fenêtre, je peux donc déplacer mes colonnes à loisir dans l'éditeur sans faire le tour des procédures pour réaligner les paramètres de la fonction.

  10. #10
    Membre éclairé Avatar de Romanops
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 278
    Par défaut
    Citation Envoyé par themayu Voir le message
    Bonsoir,

    Vous pouvez très simplement ajouter une ligne vide, en récupérant son indice, puis remplir chaque colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Indice est entier
    POUR TOUT requete
       Indice = tableajouteligne(table)
       table.COL1[Indice] = requete.champ1
       table.COL2[Indice] = requete.champ2
       ...
    FIN
    Bonjour,

    Pour ma part, j'utilise cette méthode, mais j'ai remarqué que parfois, lorsque j'utilise l'indice sur la colonne, cela génère une exception. Mais pas lorsque l'indice est sur la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    POUR TOUT sdRequête
        nIndice est un entier = TableAjouteLigne(TABLE_Article)
        TABLE_Article[nIndice].COL_Code = sdRequête.Code
        TABLE_Article[nIndice].COL_Désignation = sdRequête.Designation
        ...
    FIN
    Bon courage ^^

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Par défaut
    Merci à tous, et surtout Tatayo !!

    c'est exactement ce que je cherchais, je savais bien que cette fonction existait ! magnifique

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Par défaut Merci :-)
    Citation Envoyé par themayu Voir le message
    Bonsoir,

    Vous pouvez très simplement ajouter une ligne vide, en récupérant son indice, puis remplir chaque colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Indice est entier
    POUR TOUT requete
       Indice = tableajouteligne(table)
       table.COL1[Indice] = requete.champ1
       table.COL2[Indice] = requete.champ2
       ...
    FIN
    Bonjour bon ca fait 6 ans que vous avez posté cette réponse mais je veux juste dire merci.
    La réponse est claire sans détoure et fonctionne toujours 6 ans après avec windev 25.

  13. #13
    Membre éprouvé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Par défaut
    Citation Envoyé par niko9600 Voir le message
    Bonjour,
    J'aimerais savoir s'il existe une autre méthode que Tableajouteligne("table","champ1","champ2"etc..) car j'ai pas mal de champ avec des noms compliqués et c'est illisible...
    Bonjour,

    N'oubliez pas que vous n'êtes pas obliger de faire la fonction TableAjouteLigne() sur une seule et même ligne.
    Vous pouvez par exemple sauter une ligne après chaque ajout de champ, histoire de rendre votre code le plus lisible possible.

    Et cela sera beaucoup plus simple que de réécrire les noms des colonnes, chose inutile avec la fonction TableAjouteLigne().

    Nhaps

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

Discussions similaires

  1. ajouter ligne dans table
    Par tilily dans le forum ASP.NET
    Réponses: 2
    Dernier message: 11/02/2009, 06h33
  2. ajouter supprimer une ligne dans table
    Par mans27 dans le forum JSF
    Réponses: 1
    Dernier message: 28/05/2007, 13h56
  3. Ajout dans table par formulaire
    Par Elendill dans le forum VBA Access
    Réponses: 5
    Dernier message: 25/05/2007, 19h49
  4. Ajout de lignes dans table fichier
    Par Philippe.p dans le forum WinDev
    Réponses: 8
    Dernier message: 08/12/2006, 16h58
  5. Réponses: 1
    Dernier message: 02/06/2006, 13h51

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