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 :

Créer une table mémoire. [WD25]


Sujet :

WinDev

  1. #21
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    Oui, la syntaxe que tu proposes FEN_Affiche_PERSONNEL.TABLE_PERSONNEL.COL_NomColonne est correcte.
    Mais bien entendu, il faut que la fenêtre soit ouverte, que la table TABLE_PERSONNEL ait été initialisée avec des données dedans, etc.

    Pour l'aide et la doc, il y a beaucoup de mini-projets exemples fournis avec Windev. Je viens de regarder dans mon répertoire 'Exemples'. J'ai 3604 fichiers .WDW, autrement dit 3604 fenêtres ! Et 136 fichiers WDP, 136 programmes.
    Bon, ça ne veut pas dire que tout est intéressant dans ces 3604 fenêtres, mais ça fait beaucoup d'exemples, où on peut voir le programme tourner, et le code correspondant. Et on peut modifier le code, pour faire des essais...

    En jouant avec ces fichiers exemples, on est ACTIF. En regardant une video, on est PASSIF (je sais, c'est une réflexion de vieux )
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  2. #22
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Bonjour à tous,

    J'avance doucement mais je ne suis toujours pas sorti de l'auberge.

    J'ai tenté les Classes mais j'ai abandonné l'idée. Cela demande trop de compétence que je n'ai malheureusement pas et je m'aperçois que cela ne correspond pas vraiment à ce que je souhaiterais faire au final.
    Je suis reparti de zéro et j'ai mis à plat mon projet et me suis créé un projet de test pour ma réalisation.

    Dans ce cas, j'ai un fichier de donnée dans une table MySQL qui contient un ensemble de paramètre. L'idée, c'est que ces paramètres soient affectés dans les différentes variables globales du projet.
    A ce moment, je me suis dit qu'il était probablement plus judicieux de créer une PROCEDURE GLOBALE pour faire cela.

    VOICI MA TABLE MySQL PARAMETRE :
    id_param parametre valeur variable_associee
    1 Nom utilisateur ftp testftp gnnom_utilisateur_ftp
    2 MDP FTP motdepasse gnmot_de_passe_ftp

    Dans mon projet (de test), j'ai créé deux variables globales que j'ai appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gsnom_utilisateur_ftp
    gsmot_de_passe_ftp
    J'ai une requête que j'ai appelé REQ_recuperation_parametre : (L'idée étant de récupérer les valeurs et les variables associées dont le champ variables associées n'est pas nul). J'ai testé ma requête, elle fonctionne.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    	PARAMETRE.valeur AS valeur,	
    	PARAMETRE.variable_associee AS variable_associee
    FROM 
    	PARAMETRE
    WHERE 
    	PARAMETRE.variable_associee IS NOT NULL

    J'ai ensuite créé une procédure globale appelée affectation_parametre() (J'ai géré les erreurs mais j'ai effacé les lignes pour plus de visibilité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROCÉDURE affectation_parametre()
    HOuvre(parametre,"",hOLecture)
    HExécuteRequête(REQ_recuperation_parametre)
    POUR TOUT REQ_recuperation_parametre
    REQ_recuperation_parametre.variable_associee = REQ_recuperation_parametre.valeur
    FIN
    Dans l'idée, je souhaiterais affecter les valeurs de ma table PARAMETRE à mes variables globales en appelant ma procédure.

    A la fin de l'initialisation de la fenêtre de mon projet, j'appelle ma procédure.
    Le projet plante...

    Ai-je fais quelquechose de mal ??? Avez-vous une idée de comment il me faudrait procéder pour faire les choses correctement ?

  3. #23
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    J'ai testé à nouveau le projet, ce dernier ne plante plus mais les variables restent sans valeur.

    J'ai ajouté une fenêtre Info dans ma procédure et j'ai bien mes valeurs dans ma requête. Donc, je dirais que ça ne vient pas de la requête mais de la manière dont sont interprétés les valeurs par Windev.

  4. #24
    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
    Bonjour,

    Citation Envoyé par Trebor Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE affectation_parametre()
    ...
    REQ_recuperation_parametre.variable_associee = REQ_recuperation_parametre.valeur
    FIN
    ...
    Hum, cette ligne ne te semble-t-elle pas douteuse ??

  5. #25
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Sous Windev, je me doutais qu'elle poserait problème mais dans mon idée, je souhaite affecter une valeur à chaque variable globale.
    J'ai une fenêtre info() pour tester ma requête qui m'affiche bien mes variables.
    En exécutant ce bout de code, je pensais que l'affectation se ferait.

    Exemple :

    J'ai une variable globale qui s'appelle : globale_test est une chaîne = "".
    Dans ma table : variable_associee = "globale_test" (soit le même nom que dans mon projet) et elle a comme valeur "titi".

    Je souhaiterais que lors de l'exécution de ma procédure globale la variable globale_test prenne la valeur "titi".
    D'où mon code :
    REQ_recuperation_parametre.variable_associee = REQ_recuperation_parametre.valeur

    Mais je n'emploie peut-être pas la bonne méthode.

  6. #26
    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
    Citation Envoyé par Trebor Voir le message
    Sous Windev, je me doutais qu'elle poserait problème mais dans mon idée, je souhaite affectée une valeur à chaque variable globale....
    D'où mon code :
    REQ_recuperation_parametre.variable_associee = REQ_recuperation_parametre.valeur

    Mais je n'emploie peut-être pas la bonne méthode.
    Re-hum. Un peu de bon sens Trebor. Ceci posera un Pb quel que soit l'environnement.

    Tu affectes la valeur "valeur" de ta source de données (REQ_recuperation_parametre.valeur) à la zone mémoire occupée par "variable_associee" de ta même source de données (REQ_recuperation_parametre.variable_associee)

    Comment veux-tu que la variable globale "globale_test" se voit affecter une quelconque valeur ?

  7. #27
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Effectivement... Présenté comme ça, je comprend d'où vient le problème. Je ne suis pas développeur et mes compétences sont limitées, même si j'apprends un peu plus chaque jour qui passe.

    Comment pourrais-je passer les valeurs extraites de ma colonne à la variable correspondante ? Il doit probablement exister une solution.

  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
    Eh bien je n'ai pas tout suivi et je ne sais pas ce que tu as dans ta table (au sens fichier de données j'imagine) mais si ta requête te retourne :

    REQ_recuperation_parametre.variable_associee // s'il y a "titi" là dedans
    et que tu veux que globale_test prenne cette valeur, alors il me semble que cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    globale_test = REQ_recuperation_parametre.variable_associee
    te donnerai satisfaction.

    Mais si "titi" se trouve dans :
    REQ_recuperation_parametre.valeur
    alors écrit plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    globale_test = REQ_recuperation_parametre.valeur
    hth,
    Padbrain

  9. #29
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Oui tu as compris l'idée. C'est effectivement pour faire ça au final. Mais je dois récupérer les valeurs de l'ensemble des variables globales de mon projet depuis une table MySQL. Il y en a potentiellement beaucoup et je voulais m'éviter une redondance de code en ayant à saisir :
    variable = donnée extraite de la base MySQL

    Je pensais pouvoir affecter les valeurs de mes variables en une seule requête mais ce n'est peut-être pas possible.

  10. #30
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 799
    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 799
    Points : 5 240
    Points
    5 240
    Billets dans le blog
    1
    Par défaut
    Il me semble que dans ton cas, la paire SauveParamètre/ChargeParamètre (ou HSauveParamètre/HChargeParamètre pour les stocker sur le serveur) serait intéressante.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #31
    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
    Essaie p-e les indirections. Je ne les utilise pas mais ceci devrait convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {REQ_recuperation_parametre.variable_associee, indVariable} = REQ_recuperation_parametre.valeur
    Des spécialistes de la syntaxe des indirections pourront confirmer, ou pas !

  12. #32
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Il me semble que dans ton cas, la paire SauveParamètre/ChargeParamètre (ou HSauveParamètre/HChargeParamètre pour les stocker sur le serveur) serait intéressante.
    Effectivement, mais certains paramètres changent tellement souvent (machine sur différents réseaux) qu'il était plus simple d'avoir une base externe pour récupérer les informations mais je garde cette fonction pour plus tard dans une évolution futur...

    Citation Envoyé par padbrain Voir le message
    Essaie p-e les indirections. Je ne les utilise pas mais ceci devrait convenir :
    Eureka !!! les indirections..... J'avais lu quelques lignes sur les indirections dans la doc mais ne comprenait pas l'usage, même si j'en comprenais le principe. J'ai également vu une vidéo à ce sujet mais n'arrivais pas mettre en oeuvre le principe dans mon code...
    Et là... le miracle se produit... une petite recherche avec les bons termes et... Tada...

    Le sujet est évoqué dans ce post... Je vais me pencher dessus et je crois que ça va changer ma vie... Je vais enfin pouvoir passer à autre chose...

    Merci à vous tous pour l'aide et les réflexions que vous m'avez apporté. Cela a été précieux à mes yeux et cela fait plaisir de voir qu'on peut encore trouver des personnes qui prennent le temps de partager leur savoir et expérience pour aider les autres à évoluer.

  13. #33
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    CA FONCTIONNE..... Punaise... Depuis le temps que je me triture l'esprit avec ça...
    Un grand merci à vous tous qui avez essayé de m'aiguiller...
    Finalement pour parvenir à mes fins, je n'avais pas besoin de table mémoire mais simplement d'utiliser les indirections... C'était tellement simple et pourtant...

  14. #34
    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
    maintenant tu t'en souviendras

    Peux-tu poster la syntaxe utilisée pour tes indirections ou la solution retenue, pour archives ?

  15. #35
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Pour cet exemple, nous avons dans le projet une base de donnée MySQL. Cette base et ses tables sont importées dans le projet et sont mise à jour à chaque chargement de l'exécutable qui a été généré à l'issue du projet.

    Voici les colonnes de la table nommée : PARAMETRES

    Colonne : ID qui est l'identifiant unique du / des paramètres (Cette colonne n'est pas indispensable. Il est possible de rendre une autre colonne comme clé unique.)

    Colonne : parametre (Cette colonne est utile mais pas indispensable, elle permet de savoir à quoi correspond "en français" chaque variable.)

    Colonne : variable_associee (Cette colonne contient les variables globales du projet. Elle est impérative puisque c'est dans cette colonne que la procédure ira chercher le nom des variables globales pour leur affecter des valeurs.)

    Colonne : typeVariable (Cette colonne contient le type de variable (Chaîne, booléen ou entier). En fonction du type de variable une commande est appliquée.

    Colonne : valeur (C'est à partir de cette colonne que la valeur sera affectée à la variable globale.)

    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
    // Initialisation des variables globales déclarées dans le code du projet
    PROCEDURE Initialisation_des_parametres()
     
    sNomVariableLuFichier est un chaîne
     
    // Chargement des noms de chaques variables globales (déclarées préalablement) ainsi que leur valeur respective à partir du fichier (tables MySQL) "PARAMETRES"
    HLitPremier(PARAMETRES,variable_associee)
    TANTQUE PAS HEnDehors(PARAMETRES)
     
    	sNomVariableLuFichier = PARAMETRES.variable_associee
     
    	// Traitement selon le type de la variable
    	SELON PARAMETRES.typeVariable
     
    		CAS "Chaîne"
    			{sNomVariableLuFichier} = PARAMETRES.valeur
     
    		CAS "Entier"
    			{sNomVariableLuFichier} = Val(PARAMETRES.valeur)
     
    		CAS "Booléen"
    			{sNomVariableLuFichier} = PARAMETRES.valeur="Faux" ? Faux SINON Vrai
     
    		AUTRE CAS
    			Info ("Aucun type n'est défini pour la variable "+{sNomVariableLuFichier}+,"Merci de compléter le champ : "+PARAMETRES.parametre) 	
    	FIN
     
    	HLitSuivant(PARAMETRES, variable_associee)
     
    FIN
    Ce code n'est pas de moi. Vous pouvez retrouver l'auteur de ce code dans le post initial.

  16. #36
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    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 049
    Points : 9 384
    Points
    9 384
    Par défaut
    C'est résolu et ça marche , donc tout va bien.
    Je n'ai pas tout lu, mais je pense que j'ai développé avec Windev pendant 4 ou 5 ans, 12 heures par jour, avant d'utiliser pour la 1ère fois des indirections. C'est quand même un truc assez spécifique, et ça me surprend beaucoup qu'on passe par ça pour un problème de débutant.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  17. #37
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 799
    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 799
    Points : 5 240
    Points
    5 240
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Trebor Voir le message
    je n'avais pas besoin de table mémoire
    En général, les champ table cachés pour faire des recherches sont rarement une bonne idée.
    Citation Envoyé par tbc92 Voir le message
    ça me surprend beaucoup qu'on passe par ça pour un problème de débutant.
    l'utilisation de l'indirection vient surtout du fait que la description des variables est stockée dans la table Paramètres et qu'il veut affecter les données récupérées lors de la lecture et non pas après une recherche
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  18. #38
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Dans ce cas bien particulier, je me doutais que l'utilisation de table n'était pas une bonne idée. Mes connaissances et compétences en développement sous Windev étaient toutefois trop limité pour me permettre d'envisager autre chose. D'où la demande d'aide auprès d'experts.

    En 1 semaine, j'ai, je trouve, énormément appris à vos côtés. Il me faut encore travailler la POO parce que je pense que dans le futur j'en aurai besoin. J'ai bien compris le concept mais de là à l'utiliser...

    Pour ce qui est des indirections, je connaissais ce "concept" sous PHP mais n'avait jamais eu à l'utiliser. Je ne pensais pas que sous Windev, il était nécessaire de les utiliser dans mon cas.
    Je me voyais mal coder une boucle qui allait chercher un ensemble de paramètres dans une table, cela aurait créé des redondances de code. Je pense que c'est jouable pour quelques valeurs mais dès que la table prend 1000 valeurs, les choses se compliquent (en imaginant un très gros projet).

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

Discussions similaires

  1. Créer une table à partir d'une autre dans un script
    Par Dam)rpgheaven dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/06/2005, 10h55
  2. créer une table de folder
    Par bibifinal dans le forum MFC
    Réponses: 2
    Dernier message: 25/02/2005, 14h24
  3. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 15h15
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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