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 :

Thread qui ajoute des lignes à une table


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Thread qui ajoute des lignes à une table
    Bonjour,

    J'ai un petit soucis.
    Dans une fenêtre, j'ai une table que je remplis par programmation avec le résultat d'une requête.

    Ce remplissage, je souhaiterais qu'il se fasse en mode thread. Pour ce faire, j'ai créé une procédure locale et j'ai coché dans les options d'exécution, Exécution en tache de fond (Thread) et je déclenche cette procédure après l'initialisation de ma fenêtre.

    Dans le thread, pendant que ma requête s'exécute, tout va bien. En revanche, quand je fais le TableAjouteLigne en parcourant le résultat de la requête, je n'ai pas d'erreur mais le thread reste bloqué sur cette ligne.

    Est-ce que quelqu'un sait comment se sortir de cette situation ?

    D'avance merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Et en remplaçant l'ajout d'une ligne par une autre action (comme l'affichage de la donnée dans le trace, ou bien l'ajout à un fichier texte) ça fonctionne ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Merci de ton intérêt Bowen.

    J'ai essayé de remplacer le tableAjouteLigne par Trace avec le contenu de la ligne et ça fonctionne, j'ai dans la fenêtre de trace ce qui devrait se trouver dans ma table.

    Etrange

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Je pense que tu crées un léger conflit (je ne suis pas spécialiste des threads mais j'ai une idée...)
    Je pense que le thread est considéré comme une procédure globale (même si tu l'as définie dans la fenêtre)
    En faisant ton table ajoute, le compilateur ne sait pas dans quelle fenêtre ajouter.

    Ce n'est qu'une idée, mais elle est simple à confirmer / affirmer.
    Déplace ta procédure en globale, et refais le test. Si ça marche c'est ça.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé d'appliquer ton idée Bowen mais je me heurte à un nouveau problème.
    Je n'arrive pas à référencer ma table dans le thread pour faire le tableAjouteLigne.

    Ma table se trouve dans une fenêtre interne.
    Ce que j'ai essayé pour la référencer :
    - NomDeLaFenetrePrincipale.ChampFenetreInterne.Table => Ne compile pas
    - Passage en paramètre de la table dans un variant => Erreur d'exécution (impossible de convertir un entier en champ)
    - NomDeLaFenetreInterne.Table => Erreur d'exécution (champ introuvable)
    - Indirection sur le nom de table et sur la fenetre interne => Erreur d'exécution (champ introuvable)

    Donc je ne vois vraiment pas comment la référencer dans mon thread.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Ah bas ça me semble bon signe ça. Maintenant il ne reste plus qu'a trouver la bonne façon de faire.
    Tu as tenté d'envoyer TABLE_xx..NomComplet à la procédure ?
    C'est dans une fenêtre MDI ? (utilisation des alias...)

    Et pendant qu'on y est, est-ce que ça fonctionne dans une fenêtre non interne ?
    Et pendant qu'on y est, est-ce que ça fonctionne sans être en thread ? (mais appelé au même endroit) ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Faux espoir.

    En faisant une indirection sur NomDeLaFenetrePrincipale.ChampFenetreInterne.Table, ma table est bien référencée mais je me retrouve avec le même comportement qu'au début sur le TableAjouteLigne donc le passage en procédure globale ne semble pas corriger le problème.

    Sinon, oui ça fonctionne quand ce n'est pas dans un Thread.

    Drôle de problème

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Et à partir du thread, dans une fenêtre non interne ?
    Sinon, tu ne peux pas contourner et faire autrement que par un thread ? (parce que je pense de plus en plus que c'est un nouveau bug à remonter par RequeteAuST.exe)
    Si c'est pour remplir la table sans bloquer l'utilisateur, moi je fais juste une boucle d'ajout avec un multitache(-1) dans le milieu, ça marche très bien.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Lorsque ton thread demarre, la table est elle deja affiché ou pas ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Même problème à partir du Thread dans une fenêtre classique.

    Le mystère tient toujours !

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Je viens d'essayer avec WinDev15 (je n'ai pas la 14, je suis passé de 12 à 15) :
    - un fichier avec 100000 enregistrements
    - une condition sur une rubrique non clé pour que ça dure un peu plus longtemps
    - une fenêtre avec une table toute simple
    - une procédure en mode "thread + copie du contexte HyperFile" qui fait le HExecuteRequete, qui parcourt la requête et qui fait des TableAjouteLigne

    La table se remplit bien et j'ai bien la main sur la fenêtre

    Est-ce que tu aurais du code dans la table ? Par exemple du code d'affichage de ligne qui provoquerait un blocage avec le thread ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Merci youkoun pour ton idée, l'affichage ou non de la table ne rentre pas en ligne de compte mais cela m'a permis de me rendre compte que ce n'était pas dans le TableAjouteLigne que se situais le problème mais au niveau du code d'affichage de la ligne qui est appelé lors du TableAjouteLigne.

    Je pense qu'en cherchant bien mon problème va donc se régler !

    Un grand merci à tous en tous cas !!!

Discussions similaires

  1. [AC-2003] Ajouter des lignes à une tables depuis Excel
    Par DonKnacki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/12/2010, 16h04
  2. [AC-2007] Ajouter des lignes à une liste basée sur une requête
    Par Cinesra dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2010, 13h19
  3. [AC-2007] Ajouter des données à une table
    Par glooping dans le forum IHM
    Réponses: 5
    Dernier message: 16/09/2009, 10h49
  4. Requete pour ajouter des lignes à ma table
    Par dodo91 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2009, 10h34
  5. Richtextbox qui ajoute des lignes vides
    Par Seto dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2006, 14h10

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