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 :

Données n'apparaissent pas dans la table


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut Données n'apparaissent pas dans la table
    Bonjour,

    J'ai un projet WD avec un thread secondaire qui tourne toutes les 30 minutes et qui va analyser certaines choses et mettre des infos dans un log.

    A chaque ajout d'une donnée dans le log, je l'ajoute dans la table pour éviter de recharger bêtement toute ma table a chaque insertion.

    Cependant, lorsque j'ajoute ces données (en l’occurrence juste une mise à jour de couleurs de fond de cellule dans ma table), je ne les vois pas apparaître.
    Je vois ma table qui scintille montrant bien que le traitement est en cours mais la donnée n’apparaît pas

    Le seul moyen de voir apparaître ces données est de recharger toute ma table.
    Et pourtant, la procédure de chargement utilise la même fonction pour ajouter les données dans ma table que celle du thread.

    Problème de code ou de WD ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 453
    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 453
    Par défaut
    Bonjour,
    Je dirai que le bug se trouve à la ligne 15 (à moins que ce soit la ligne 22 ?).

    Plus sérieusement, comment veux tu que quiconque t'indique ce qui ne va pas, sans voire le code incriminé ?
    On ne sais pas ce que fait le thread secondaire, on ne sait rien de la table (table mémoire, fichier, basé sur un tableau d'objet, sur un fichier ?), bref on ne sait pratiquement rien.
    Je dirai donc que le problème vient du thread secondaire, vu que c'est lui qui ne fonctionne pas.

    Tatayo.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 235
    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 235
    Par défaut
    Les threads secondaires ne peuvent pas interagir avec l'interface utilisateur.
    A la fin de ton thread secondaire, il faut que tu relances un autre thread (avec comme paramètre threadPrincipal ou un truc comme ça, la doc est claire), et là, tu vas pouvoir afficher des choses à l'écran.

    Je suis surpris quand je vois : " Je vois ma table qui scintille montrant bien que le traitement est en cours mais la donnée n’apparaît pas"

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Les threads secondaires ne peuvent pas interagir avec l'interface utilisateur.
    A la fin de ton thread secondaire, il faut que tu relances un autre thread (avec comme paramètre threadPrincipal ou un truc comme ça, la doc est claire), et là, tu vas pouvoir afficher des choses à l'écran.

    Je suis surpris quand je vois : " Je vois ma table qui scintille montrant bien que le traitement est en cours mais la donnée n’apparaît pas"
    Comment ca surpris ?

    Le thread secondaire écrit dans un fichier log (procédure EcritLog) puis envoi la même chose dans la table (procédure LitEcritTable).
    La procédure CalculDurees permet juste d'incrémenter un compteur d'heures.

    Lorsque la donnée s'ajoute dans la table, à l'affichage, rien apparaît (sauf la 1ère ligne du thread)...
    Lorsque je quitte le programme et que je charge mes logs (mon fichier texte), tout apparait.

    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
     
    // Thread secondaire
    SI oStockInfo:Requete(sdRequetePC,sRequetePC) = Vrai ALORS
     
    	// Ping pour tous les résultats de la requête
    	TANTQUE cMysql::Dedans(sdRequetePC)
     
    		// Commande du ping et obtention du résultat
    		nResultat = Ping(sdRequetePC.adresse_ip)
     
    		// Ecriture dans le log
    		EcritLog(sdRequetePC.Ville, sdRequetePC.adresse_ip, sdRequetePC.Utilite, nResultat)
     
    		// Thread principal pour accéder aux données et écrire dans la table
    		ExécuteThreadPrincipal(LitEcritTable,sdRequetePC.Ville,sdRequetePC.adresse_ip, sdRequetePC.Utilite, nResultat)
     
    	FIN
     
    FIN
     
    // Thread principal pour calcul des durées d'activité/inactivité
    ExécuteThreadPrincipal(CalculDurees)

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 235
    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 235
    Par défaut
    J'avais implémenté un truc similaire, et ça marchait.
    Dans mon cas, j'appelais un thread secondaire (ou plusieurs, peu importe). A la fin de mon thread secondaire, j'appelais un (unique) thread principal, qui faisait la mise à jour sur l'interface utilisateur.

    Ici, tu appelles un thread secondaire, et ce thread secondaire va faire n appels au thread principal. N appels quasiment simultanés : entre 2 appels, la durée est très petite (on compte en millionièmes de secondes). Alors que la durée de la fonction de mise à jour de l'affichage est plus longue (tout ce qui touche à l'affichage est lent).
    Je remplacerais l'instruction de la ligne 15 par une instruction plus bas, appelée une seule fois, et qui mettrait à jour l'affichage, en insérant toutes les lignes d'un coup.

    Ce n'est pas dit clairement dans l' aide de la fonction ExecuteThreadPrincipal(), mais il y a quand même différentes alertes sur les risques de téléscopage.

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/09/2017, 20h39
  2. Lister articles qui n'apparaissent pas dans une table
    Par Maryy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/01/2013, 09h12
  3. Réponses: 6
    Dernier message: 12/11/2008, 16h20
  4. Réponses: 10
    Dernier message: 12/06/2008, 22h25
  5. toute les donnée ne s'inscrivent pas dans ma table paradox
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/06/2006, 21h11

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