PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Optimiser le chargement de tables
Optimiser le chargement de tables
Débuté par Philippe, 29 mai 2026 16:49 - 3 réponses
Membre enregistré
143 messages
Posté le 29 mai 2026 - 16:49
Bonjour à tous,

j'ai une application C/S et je charge dans une fenêtre plusieurs tables. Chaque table est chargée avec sa requête intégrée selon son code placé dans la Condition de sélection de la requête.

J'ai un fichier qui contient des codes avec la structure suivante :
- Code (clé)
- Elément (clé)
. Description

Le contenu peut être le suivant :
SPORT, 1, Football
SPORT, 2, Volleyball
SPORT, 3, Hockey
PAYS, 1, France
PAYS, 2, Suisse
etc...

Dans une table affichée, j'ai 2 colonnes : Un choix que l'utilisateur peut flaguer et la description.

J'ai aussi un autre fichier qui mémorise les choix de l'utilisateur et qui donne ceci pour le SPORT :
2
3

Ce qui indique que l'utilisateur a choisi Volleyball et Hockey.

Ma requête intégrée n'affichant que le contenu des sports, je dois ensuite lire le fichier des choix pour flaguer la colonne choisie. Je le fais de la manière suivante pour chaque table :

TABLE_COMOR..AffichageActif = Faux
i = TABLE_COMOR..Occurrence
POUR y = 1 À i
HLitRecherchePremier(OperatCom,KeyUniq,[PEtablissement,PIdOperat,PSocSaisie,TABLE_COMOR.COL_CODE[y]])
SI HTrouve(OperatCom) ALORS
TABLE_COMOR.COL_SEL[y] = Vrai
SINON
TABLE_COMOR.COL_SEL[y] = Faux
FIN
FIN
TableTrie(TABLE_COMOR,"-TABLE_COMOR.col_sel")
TABLE_COMOR..AffichageActif = Vrai

Je met actuellement environ 10 secondes pour afficher cette fenêtre qui contient les tables. C'est trop lent.

Comment puis-je optimiser le tout ?

En espérant avoir été complet dans mon explication, merci de votre aide.

--
Cordialement

Philippe T.
Membre enregistré
4 403 messages
Posté le 29 mai 2026 - 22:42
Bonjour,
1-Des requêtes intégrées quelle horreur (bonjour la maintenance)
2-Pourquoi remplir la table TABLE_Commor avec une boucle et pas une requête. Ta boucle oblige ta fonction à alloer consulter le serveur à chaque ligne de la table alors qe la requête ne passe su'une fois par la serveur. Un SELECT ... IN ... ORDER BY SEL devrait faire l'affaire et éviterait le tri qui n'est pas fait pour accélérer l'opération.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 29 mai 2026 - 22:46
Posté le 31 mai 2026 - 05:47
Salut Philippe,

Je pense que le ralentissement vient surtout du HLitRecherchePremier() exécuté pour chaque ligne.
À ta place, je chargerais les choix une seule fois en mémoire puis je ferais les coches directement depuis cette structure, sans accès HFSQL dans la boucle.
Ça devrait déjà améliorer sensiblement les performances.

--
Maher
https://codeetcompetences.fr
Membre enregistré
143 messages
Posté le 02 juin 2026 - 16:17
Bonjour,

merci de votre aide, j'ai fais cette solution :

Pour info et pour compléter ce sujet, voici mon code :

TABLE_COMOR..AffichageActif = Faux
REQ_COMOR.paramIdOperat = PIdOperat
TableAffiche(TABLE_COMOR,taInit)
TABLE_COMOR..AffichageActif = Vrai

Et mon code sql dans la requête :

SELECT
T.TbSigl,
T.TbElem,
T.TbDes,
CASE
WHEN O.TbCode IS NULL THEN 0
ELSE 1
END AS EstLie
FROM Tabelle T
LEFT JOIN OperatCom O
ON O.TbCode = T.TbElem
AND O.IDOPERAT = {paramIdOperat}
WHERE T.TbSigl = 'COMORB'
ORDER BY
EstLie DESC,
T.TbDes

Pour les paramètres de la TABLE_COMOR, le fichier parcouru est REQ_COMOR, avec parcours automatique sur EstLie avec le flag "Parcours inversé" pour avoir les records choisis en premier.

Merci encore à tous les deux.

--
Cordialement

Philippe T.