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 :

[WD26] Création de table à la volée. Quelle est la meilleure méthode


Sujet :

WinDev

  1. #21
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Il me semble que la bonne syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_vUnChampColonne..LiaisonFichier = ":gf_sdReqLstArt."+.chNomChamp
    Mais je n'en ai aucun certitude...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  2. #22
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Merci PhilouZ, mais ça ne change rien.

    Je me demande si c'est possible, et si je ne devrais pas passer par un défilement par programmation. Mais, ça ne m'arrange pas vraiment.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #23
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Toujours sur ce problème.
    Je pense que ça vient de l'initialisation de la table. Comme c'est un parcours automatique sur fichier/requête, il n'y a aucun code. Du coup, le table.affiche(tainit) ne fait rien !
    Enfin, c'est ce que je comprends.

    Je pense que ce principe est valable dans le cas d'une requête décrite lors de la conception, pas dans le cas d'une requête écrite à la volée.

    Je ne vois pas de moyen de réaliser ce que je veux faire...

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #24
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    J'ai relu ton code et il me semble que tu ne peux pas lier une table à une variable de type source de données. J'ai eu ce problème et j'ai du créer un tableau pour lier la table au tableau.

    Je vois plusieurs solutions au problème:
    1. tu crées ta requête et dans le select les colonnes doivent avoir le même ordre que les colonnes et tu fais un FichierVersTableMémoire. Problème si l'ordre des colonnes bouge entre 2 requêtes les données ne seront pas au bon endroit.
    2. ta requête est définie à l'avance, tu lies donc les colonnes à la requête
    3. tu crées un tableau de * par x variants, x étant le nombre de colonnes de la requête. Tu lies ta table à la variable que tu viens de créer. Tu exécutes ta requête et tu fais un FichierVersTableau(). (Jamais testé mais ça peut être intéressant de voir si ça fonctionne)
    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
    x est entier = 3
    gtabMonTableau est un tableau de * par x Variants
     
    POUR TOUT l_vColonne, l_inIndice de gf_taLesColonnes
    	AVEC l_vColonne
    		SI .chTypeColonne = "B" ALORS
    			l_vUnChampColonne <- ChampClone(COL_AjtInt,ChaîneConstruit( "COL_%1",.chNomColonne)) //J'ai créé une colonne COL_AJTINT pour ajouter des colonnes interrupteurs, car je n'arrivais pas à les créer depuis la colonne COL_AJOUT
    		SINON
    			l_vUnChampColonne <- ChampClone(COL_Ajout, ChaîneConstruit( "COL_%1",.chNomColonne))
     			l_vUnChampColonne..MasqueAffichage = .chFormat
    			l_vUnChampColonne..Taille = .inNbcarac
    		FIN
    		l_vUnChampColonne..Libellé = .chLibelle
    		l_vUnChampColonne..Largeur = .inLargeur
    		l_vUnChampColonne..TauxAncrageLargeur = .inTauxancrage
    		l_inTotAncrage = .inTauxancrage
    		SELON .chTypeColonne
    			CAS "C"	: l_vUnChampColonne..TypeSaisie = typSaisieTexte
    			CAS "N"	: l_vUnChampColonne..TypeSaisie = typSaisieNum
    			CAS "D" : l_vUnChampColonne..TypeSaisie = typSaisieDate
    			CAS "H" : l_vUnChampColonne..TypeSaisie = typSaisieHeure
    			CAS "Du" : l_vUnChampColonne..TypeSaisie = typSaisieDurée
    			AUTRE CAS		
    		FIN
    		l_vUnChampColonne..LiaisonFichier = ":gtabMonTableau[[%l_inIndice%]]"
    		l_vUnChampColonne..Visible = .boVisible		
    	FIN
    FIN
     
    TBL_RepertArt..FichierParcouru = ":gtabMonTableau"
    SI PAS HExécuteRequêteSQL(gf_sdReqLstArt, gP_cnxCnxAppli, hRequêteSansCorrection, gf_chReqSelect_Articles)
    	Erreur( HErreurInfo(hErrCode), HErreurInfo(hErrComplet))
    SINON
     	TBL_RepertArt.Affiche()
    FIN
    4. Ajouter les lignes une par une à la table. Comme au point 1, si l'utilisateur change l'ordre des colonnes ça ne fonctionne plus.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  5. #25
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Merci PhilouZ pour ces idées.

    Juste une question. Mon problème, est que le nombre de colonnes entre la table et la requête est différent. En effet, pour faire mes champclone, j'ai créé 2 colonnes invisibles dans la table.
    Du coup, mes 2 premières colonnes de la table ne correspondent à rien !

    Si je prends la méthode du tableau (qui je pense sera celle qui me donnera le meilleur résultat), comment est-ce que je fais pour ces 2 colonnes non significatives ?

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #26
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Problème : FichierVersTableau ne semble fonctionner qu'avec un tableau de structures. Du coup, comme je ne connais pas structure de la requête (puisqu'elle est créée à la volée), je ne vois pas comment je peux faire.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  7. #27
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Le "semble" est de trop. Cela ne fonctionne qu'avec les tableaux de structures ou de classes (c'est l'équivalent "tableau" de FichierVersMémoire).
    L'idéal serait de pouvoir définir une classe issue de ta requête grâce à une variable de type Définition. Toutefois, il me semble que RécupèreDéfinition ne fonctionne pas avec les requêtes.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #28
    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
    Salut,

    Je ne vois que le point n°4 évoqué par Philouz.

    - Remplir la table ligne par ligne avec un ordre de colonne défini par l'application en fonction de la requête définie par les choix de l'utilisateur.
    - Une fois la table remplie, réorganiser l'ordre et la taille des colonnes en récupérant les infos que tu auras préalablement enregistrées (en bdd, fichier, ...) lors de la manipulation par l'utilisateur final.
    - Enfin, tu affiches la table.

  9. #29
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Merci de cette remarque, Voroltinquo.

    J'ai déclaré mon tableau comme suit :
    Code WINDEV : Sélectionner tout - Visualiser dans une fenêtre à part
    gf_tabChampsTable est un tableau de * pas * variants

    Étonnamment
    Code WINDEV : Sélectionner tout - Visualiser dans une fenêtre à part
    FichierVersTableau(gf_tabChampsTable,gf_sdReqLstArt)
    ne déclenche pas d'erreur.

    Par contre, à l'affichage de la table, j'ai une erreur : Le champ TBL_RepertArt n'a pas pu s'initialiser , car il a rencontré l'erreur de liaison suivante : gf_tabChampsTable n'est pas un objet valide pour remplir le champ TBL_RepertArt.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  10. #30
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    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 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Il faut avoir en tête que le WLangage est un langage interprété. Syntaxiquement parlant, ce que tu lui ecrit est correct donc il ne lève pas d'erreur.
    Par contre à l'exécution, il "regarde" ce que tu lui as donné et là il s'aperçoit qu'il ne sait plus faire
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #31
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 375
    Points : 9 710
    Points
    9 710
    Par défaut
    Oui, tu as raison Voroltinquo. Mais, quand il ne sait pas faire un truc, il pourrait planter à l'exécution. Il le fait d'ailleurs très souvent !


    Bon, du coup, je suis parti sur un truc un peu bourrin, mais ça fonctionne.

    J'ai créé un structure qui contient 100 rubriques (bon, ça fait déjà beaucoup 100 colonnes dans une table), notées vrRub00 à vrRub99.

    Lors de la création de ma requête, je fais des "AS vrRubnn"

    Je fais un FichierVersTableau. Ça ne le dérange pas qu'il y ait des rubriques non renseignées dans la structure.

    Lors de mes clonages de colonnes, je créé la liaison avec l'élément correspondant dans la structure : ..liaisonfichier = ":gf_tabChampsTable.vrRubnn"

    et après je fais un simple TBL_RepertArt.affiche(). Et ça roule !

    Merci à tous pour votre aide.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/01/2009, 22h47
  2. Réponses: 2
    Dernier message: 10/07/2008, 12h29
  3. [HTML] quelle est la meilleure méthode pour changer la langue d'un site?
    Par poupouille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2008, 12h17
  4. Réponses: 12
    Dernier message: 10/08/2006, 09h44
  5. Réponses: 20
    Dernier message: 27/06/2006, 17h42

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