PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → Remplir une table associé à un tableau de Classe  en executant une requête asynchrone  avec affichage progressif
Remplir une table associé à un tableau de Classe en executant une requête asynchrone avec affichage progressif
Started by Ralph IGCI, Nov., 07 2025 5:40 PM - 3 replies
Registered member
521 messages
Posted on November, 07 2025 - 5:40 PM
Je veux Remplir une table associé à un tableau de Classe en executant une requête asynchrone avec affichage progressif
J'ai ce code:
REQ_TousProduits.ExécuteRequêteAsynchrone( NouvelleDonnée,FinRecupération)

PROCEDURE INTERNE NouvelleDonnée(NouvelEnregistrement est un Enregistrement de REQ_TousProduits)


// On ajoute le nouvel enregistrement dans la zone répétée
Table_client.AjouteLigne(NouvelEnregistrement.Libellé,NouvelEnregistrement.Description )




// Par défaut, on veut continuer la récupération des données
RENVOYER Vrai
FIN

PROCEDURE INTERNE FinRecupération(nEtat est un entier)


SELON nEtat
CAS heraOK : Info("Traitement terminé")
CAS heraAnnulée : Info("Traitement annulé")
AUTRE CAS : Erreur("Une erreur est survenue", HErreurInfo())
FIN


FIN


Il remplie très bien la table au fur et à mesure.

Mais, si le champ table_Client est associé à un tableau Tabclient de la classe MCLIENT, il faut utiliser tableaffiche à la fin de la récupération dans heraOK.

Comment faire dans ce cas pour afficher au fur et à Mesure que les lignes s'ajoutente ?

J'ai ce code:
[code:wl]
Tabclient est un tableau de MCLIENT

REQ_TousProduits.ExécuteRequêteAsynchrone( NouvelleDonnée,FinRecupération)

PROCEDURE INTERNE NouvelleDonnée(NouvelEnregistrement est un Enregistrement de REQ_TousProduits)

monclient est un MCLIENT<-NouvelleDonnée
// On ajoute le nouvel enregistrement dans la zone répétée
Tabclient.ajoute(monclient)





// Par défaut, on veut continuer la récupération des données
RENVOYER Vrai
FIN

PROCEDURE INTERNE FinRecupération(nEtat est un entier)


SELON nEtat
CAS heraOK :
Table_client.affiche()
CAS heraAnnulée : Info("Traitement annulé")
AUTRE CAS : Erreur("Une erreur est survenue", HErreurInfo())
FIN


FIN


Le problème c'est qu'il attend la fin pour exécuter Table_client.affiche()
Registered member
4,303 messages
Posted on November, 07 2025 - 6:21 PM
Bonjour,
As tu tenté de remplacer
monclient est un MCLIENT<-NouvelleDonnée
// On ajoute le nouvel enregistrement dans la zone répétée
Tabclient.ajoute(monclient)

Par
FichierVersTableau(tabClient,REQ_TousProduits)
TableAffiche(TABLE_Client)


--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Registered member
521 messages
Posted on November, 08 2025 - 9:59 AM
Bonjour,
Dans une procédure asynchrone, on ne peut le faire qu'à la fin dans FinRecupération(
La vraie question comment remplir une table de façon asynchrone si c'est un tableau de variable?
Registered member
51 messages
Posted on November, 10 2025 - 12:13 PM
Bonjour,

A mon avis, le rafraichissement de la table lors du chargement nécessite des ressources qu'il convient d'économiser pour augmenter les performances. Une progressbar devrait suffire pour faire patienter l'utilisateur.

Néanmoins, pour répondre à ton besoin, si nous avons une table CLIENT contenant IDCLIENT, NOM, ADRESSE lié sur une CLASSE MCLIENT et une fenêtre contenant une variable de type tableau de MCLIENT lié à la table TABLE_TabClients:

sdClients est Source dede Données

sSql est chaîne = "SELECT IDCLIENT, NOM, ADRESSE FROM CLIENT"

SI PAS HExécuteRequêteSQLAsynchrone(sdClients, hRequêteInterruptible, sSql, TraiteChaqueEnregistrement, FinDuChargement) ALORS
Erreur("Echec!", HErreurInfo(hErrComplet))
FIN

Trace("I'm asynchrone")

PROCEDURE INTERNE TraiteChaqueEnregistrement(enreg est un Enregistrement de CLIENT)
MonClient est un MCLIENT
MonClient = enreg
tabClients.Ajoute(MonClient)
TableAffiche(TABLE_TabClients)
FenRepeint(FEN_Table_Client)
FIN

PROCEDURE INTERNE FinDuChargement()
Trace("Fin")
TableAffiche(TABLE_TabClients)
FIN


A noter que l'exécution de la requête ne bloque pas. Tu peux ajouter des traitements métiers qui ne doivent pas considérer que la table est complètement remplie.

En espérant avoir un peu aidé.

--
La complexité d'une solution doit être adaptée à la complexité du problème qu'elle essaye de résoudre.