|
| 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 RTFMMessage 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. |
| |
| |
| | | |
|
| | | | |
| | |
|