PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Lenteur requête avec tables SQL Server et Access
Lenteur requête avec tables SQL Server et Access
Débuté par Mickaël, 23 avr. 2018 10:02 - 6 réponses
Membre enregistré
3 messages
Posté le 23 avril 2018 - 10:02
Bonjour,

Je suis actuellement en train de migrer une de nos applications Access sous Windev (Version 21).
Une de nos requêtes impliquant des tables SQL Server et Access (déclarées dans l'analyse du projet) est extrêmement longue par rapport à sa version sous Access, 38 secondes au lieu d'une seconde dans Access. Je ne peux bien évidemment pas présenter ça à ma direction...
Pour info nous utilisons l'accès natif SQL Server pour les tables SQL Server et Access (Microsoft Jet OLEDB 4.0) pour les tables Access (il s'agit de bases en version 97).

Voici le contenu de la requête :
SELECT T04PLAN.PLN_TIERS, T04PLAN.PLN_AFFAIRE, T04PLAN.PLN_AFF1, T04PLAN.PLN_AFF2, T04PLAN.PLN_RESSOURCE, T04DEPOT.DP_RENDU, T04DEPOT.DP_RESSOURCE,
T04DEPOT.DP_DEPARTEMENT, T04DEPOT.DP_IRIS, T04DEPOT.DP_TVA, T04DEPOT.DP_SIGNATURE, T04DEPOT.DP_RENONCIATION, T04DEPOT.DP_FINEX,Clients.MoisCloture,Clients.DateSortie AS YTC_DATELIBRE3,Intervenants.Nom AS T_LIBELLE
FROM ((T04PLAN INNER JOIN T04DEPOT ON T04PLAN.PLN_AFFAIRE=T04DEPOT.DP_AFFAIRE AND T04PLAN.PLN_TIERS=T04DEPOT.DP_TIERS)
LEFT JOIN Clients ON T04PLAN.PLN_TIERS = Clients.Code)
LEFT JOIN Intervenants ON T04PLAN.PLN_TIERS = Intervenants.Code
WHERE T04DEPOT.DP_AFF2 LIKE {ParamAnnee} AND T04PLAN.PLN_RESSOURCE LIKE %{ParamRessource}% AND Clients.CodeAutre2 LIKE %{ParamEquipe}%
GROUP BY T04PLAN.PLN_TIERS, T04PLAN.PLN_AFFAIRE, T04PLAN.PLN_AFF1, T04PLAN.PLN_AFF2, T04PLAN.PLN_RESSOURCE, T04DEPOT.DP_RENDU,
T04DEPOT.DP_RESSOURCE, T04DEPOT.DP_DEPARTEMENT, T04DEPOT.DP_IRIS, T04DEPOT.DP_TVA, T04DEPOT.DP_SIGNATURE, T04DEPOT.DP_RENONCIATION, T04DEPOT.DP_FINEX,Clients.MoisCloture,Clients.DateSortie,Intervenants.Nom


Est-ce un problème connu et existe-t-il un moyen d'optimiser ce genre de requête ?
Message modifié, 23 avril 2018 - 10:05
Posté le 23 avril 2018 - 15:51
bonjour
comment est exécutez cette requête vu que vous devez passer par l'odbc access quel fonction windev

vous dites une seconde sous access si vous copier le sql de la requete acess et l'envoyez par windev?
sans passez {ParamAnnee} %{ParamRessource}% et %{ParamEquipe}% en mettant les valeurs en dur dans le sql que se passe t'il
Membre enregistré
3 messages
Posté le 23 avril 2018 - 17:14
Merci pour votre réponse.

La requête est lancée mode test (clic droit>tester la requête dans l'éditeur de requête).
Je viens de faire le test avec les valeurs en dur et j'ai les mêmes délais d'ouverture :/
Posté le 23 avril 2018 - 21:28
je vous demandais si vous lanciez le requête sans correction parce que avec l’éditeur de requête c'est une requête par défaut donc a voir ce que fais les pilotes odbc

logiquement vous devriez passe par sqlexec


pourquoi vous passez pas les bases Access vers le serveur sql , parce que en version 97 vous garder un boulet
Membre enregistré
3 messages
Posté le 23 avril 2018 - 23:14
Nous avons nos données internes sous SQL Server et notre production sous Quadratus (Bases Access 97 donc).
Certaines de nos requêtes doivent interroger les 2 sources de données en même temps.
La requête est exécutée avec correction sinon elle ne se lance pas du tout., j'imagine que l'utilisation de 2 connexions dans cette requête y est surement pour quelque chose.
Bref, je suis vraiment embêté car les délais d'affichage sont vraiment énormes par rapport à nos applications sous Access, c'est inutilisable en l'état.
Posté le 24 avril 2018 - 09:28
faire un test
sous access vous avez vos table sql serveur lié par odbc

essayer de faire une requête sous access considérer comme une vue sur les table access en liaison avec les tables sqlserveur

puis faire une requete windev sur cette vue

comme cela vous êtes mono connexion .
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 24 avril 2018 - 09:41
Bonjour,

Peut-être pouvez vous exécuter les requêtes séparément d'abord celle sur Access, puis celle sur SQL Server (ou inversement) pour les exécuter sans correction, et traiter les données dans un tableau ou un champ table. Je pense que ce sera suffisamment rapide.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique