Bonjour,
Je viens de migrer notre base .accdb vers sql server.
J'ai une fonction qui lie mes tables sql dans mon application acces :
DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;Driver={ODBC Driver 17 for SQL Server};Server=*******;Database=*******;Uid=******;Pwd=******", acTable, d!TableName, d!TableName, False, True
Toutes mes interfaces fonctionnent correctement cependant j'ai des lenteurs qui se sont accentuées depuis cette migration.
Afin d'avoir des interfaces IHM communes, j'instancie des form avec différents filtres.
Je construis un string de requête de la manière suivante :
1 2 3 4 5 6 7 8 9 10
|
StrSelect = "SELECT OrdresFabrications.*, OrdresFabrications.EnControle, OrdresFabrications.NumCmd,OrdresFabrications.NumAffaire, OrdresFabrications.[Sous-Traitant], OrdresFabrications.NumAppelOffre, OrdresFabrications.Solde, OrdresFabrications.EnControle, OrdresFabrications.CodeArticle "
Select Case NomForm
Case "Form Général - Non Soldé"
StrRequest = StrSelect & _
"FROM OrdresFabrications " & _
"WHERE (((OrdresFabrications.Solde) = False)) " & _
"ORDER BY OrdresFabrications.NumOF" |
Ensuite je viens associer cette requête au RecordSource de ma form :
Gvar_FormGestionOF2(Gvar_NbFormGestionOF2).RecordSource = StrRequest
Je travaille exclusivement en mode feuille de donnée et il y'a environ 3000 lignes dans certains cas à afficher.
Le temps d'ouverture de la form est très long, environ de 30 à 40sec.
j'ai fait la même chose en faisant une requête access via l'éditeut et en utilisant "SQL Direct" qui correspond au "Pass-Throught"
Gvar_FormGestionOF2(Gvar_NbFormGestionOF2).RecordSource = "Query1"
Le résultat est immédiat.
Avez-vous une méthode pour faire la même chose depuis mes requêtes en VBA.
PS: Après analyse du SQL Profiler en mode requête VBA :

en mode requête via l'éditeur access

Je vois la command BatchStarting qui pour mois est la différence majeur.
Merci
Partager