PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → HExécuteRequêteSQL et tâche parallèle
HExécuteRequêteSQL et tâche parallèle
Iniciado por Chris, 28,dic. 2018 14:51 - 8 respuestas
Miembro registrado
81 mensajes
Publicado el 28,diciembre 2018 - 14:51
Bonjour,

J'essai d'exécuter une requête construite avec une chaine dans une tâche parallèle.

sdReq est une Source dede Données
HExécuteRequêteSQL(sdReq,hRequêteDéfaut,pRequete)

ExécuteThreadPrincipal(RemplirTable)

PROCEDURE INTERNE RemplirTable()

TABLE_Requete..FichierParcouru = sdReq
ConstruitTableFichier(TABLE_Requete,sdReq,taRemplirTable)

FIN


Mais j'ai l'erreur suivante :
Vous avez appelé la FONCTION ExécuteThreadPrincipal.
L'élément 'sdReq' n'a pas été trouvé.


Si je fais mon HExécuteRequêteSQL hors de la tâche parallèle, ça passe ... Mais ça bloque l'application le temps d'exécution.

Avez-vous une idée de la raison de ce blocage ?
Publicado el 28,diciembre 2018 - 16:55
Bonjour

Et en déclarant la source de données en global ? (Fenêtre ou projet)
Miembro registrado
81 mensajes
Publicado el 29,diciembre 2018 - 21:23
Idem avec la variable "Source de données" déclarées dans le code global de la fenêtre. Et pareil si c'est une variable globale du projet.
Miembro registrado
281 mensajes
Publicado el 29,diciembre 2018 - 23:59
Bonjour,

En l’a passant en paramètre à la procédure interne ?
Miembro registrado
81 mensajes
Publicado el 31,diciembre 2018 - 11:41
Même chose en passant la variable "source de données" en paramètre d'une procédure interne exécutée en "ExécuteThreadPrincipal".
Miembro registrado
16 mensajes
Publicado el 07,enero 2019 - 20:11
sdReq est une Source dede Données
HExécuteRequêteSQL(sdReq,hRequêteDéfaut,pRequete)
ExécuteThreadPrincipal(remplir,sdReq)
PROCEDURE INTERNE remplir(sdd)
TABLE_1..FichierParcouru=sdd
ConstruitTableFichier(TABLE_1,sdd,taRemplirTable)

FIN


ca fonctionne tres bien
Miembro registrado
81 mensajes
Publicado el 08,enero 2019 - 08:59
FM a écrit :
> ca fonctionne tres bien

Bonjour, J'aimerais savoir comment vous faites car moi ça ne fonctionne pas du tout.
WinDev 23 (pas pu tester encore en 24).

Mon code est sur le clic d'un bouton :
TâcheParallèleExécute(ExecuterSQL,(sSQL),tpoCopieComplèteContexteHFSQL)


PROCEDURE INTERNE ExecuterSQL(pTexteSQL)

sdRequete est une Source dede Données

SI PAS HExécuteRequêteSQL(sdRequete,hRequêteDéfaut,pTexteSQL) ALORS
ExécuteThreadPrincipal(DoAffichage,HErreurInfo())
RETOUR
FIN

ExécuteThreadPrincipal(RemplirTable,sdRequete)


PROCEDURE INTERNE DoAffichage(pMessage)

Info(pMessage)

FIN

PROCEDURE INTERNE RemplirTable(pDonnees)

TABLE_Requete..FichierParcouru = pDonnees
ConstruitTableFichier(TABLE_Requete,pDonnees,taRemplirTable)

FIN

FIN


La connexion aux fichiers est en HFSQL et est bien ouverte.
La requête est écrite dans la variable sSQL.
Miembro registrado
16 mensajes
Publicado el 08,enero 2019 - 15:16
Bonjour

Avec le code complet, c est différent
Tu as un problème de contexte

Mais l 'intérêt de mettre à la fois l exécution de la requête et le remplissage de la table dans un traitement parallèle.
Si tu sors l exécution de la requête de ton traitement parallèle, ça fonctionne !
Miembro registrado
81 mensajes
Publicado el 08,enero 2019 - 16:04
FM a écrit :
> Si tu sors l exécution de la requête de ton traitement parallèle, ça fonctionne !

Oui ça fonctionne mais ça bloque le logiciel, c'est bien ça l'intérêt de la tâche parallèle.