IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête très lente depuis table externe en BD SQLServer2008 [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut Requête très lente depuis table externe en BD SQLServer2008
    Bonjour à tous.

    J'ai trois BD différentes qui auraient en commun trois tables (tblVilles, tblDepartement, tblPays) et je voudrais avoir ces trois tables séparées de chaque BD, et me servir d'elles en tant que tables extérieures. Dans la tblVilles par exemple j'ai toutes les villes de France (et certaines villes d'autres pays), liées par un IdDepartement à leur département respectif... J'en ai presque 40,000 enregistrements seulement dans tblVilles, d'où mon intérêt d'avoir ces trois tables une seule fois.

    Je les ai mise dans SQLServer 2008. Mais si j’essaie par exemple de remplir un combobox avec toutes les villes depuis un formulaire d'une de mes BD, le temps d'execution est très lent (environ 25s) alors que si j'ai ma tblVilles sur la même BD le formulaire s'ouvre très vite.

    N'étant pas très connaisseur de SQLServer je me demande si je dois faire quelque chose du coté SQLServer (j'ai seulement exporté les trois tables avec l'utilitaire d'Access). La connexion se fait bien et le combobox est rempli avec les données.

    Si j’essaie d'ouvrir la table depuis une autre BD Access, même problème de lenteur.

    Je vous remercie si vous avez des conseils à me donner.

    Voici le code que j'utilise pour faire cette manip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Form_Load()
        Dim cnt As New ADODB.Connection
        Dim rst As New ADODB.Recordset
        Dim strSQL As String
     
        strSQL = "SELECT IdVille, Ville FROM dbo.qryVilles"
        cnt.ConnectionString = "Provider = SQLNCLI10;" & _
                                "Data Source=(local);" & _
                                "Database=BDTestSQL;" & _
                                "Integrated Security=SSPI;"
        cnt.Open
        Set rst.ActiveConnection = cnt
        rst.Open strSQL, cnt
     
        Do While Not rst.EOF
            Me.cboVille.AddItem rst.Fields(0) & ";" & rst.Fields(1)
            rst.MoveNext
        Loop
     
        cnt.Close
        Set cnt = Nothing
     
    End Sub

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Alfhcg,

    Quel type d'objet est "dbo.qryVilles", dans SQL Server ?
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Il s'agit d'une requête.
    J'ai aussi essayé avec la table elle-même et la lenteur d’exécution depuis access est pareil. Par contre depuis SQLServer elle s’exécute normalement.

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Par "requête" tu entends "vue" ?
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Oui, une vue. Comme j'ai déjà dit, je n'ai aucune idée de SQLServer, mais j'ai quand même réussi à faire une vue, avec le dessinateur graphique, qui ressemble bcp celui d'access.

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Côté SQL Server, le temps de réponse du lancement de cette vue est-il long ?

    Sinon, as-tu essayé via ODBC (ta vue devient une table liée) ?
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Bonjour Richard.

    Pour répondre à ta question la requête est lente aussi sur SQLServer, par contre si depuis la table (dbo.tblVilles) je lui dis de me lire les 40,000 premiers enregistrements, ils sont listés tous dans 2 ou 3 secondes!!!

    Par rapport à OCDB, j'ai en effet fait une connexion OCDB qui m'a liée la table externe (dbo_tblVilles) à ma BD. Maintenant je peux remplir mon combobox directement sans passer par un recordset qui va chercher les valeurs dans le serveur SQL.

    Bien que ça marche, je ne suis pas satisfait car dans ma tête j'ai cru qu'une connexion SQL marcherait niquel, sans être obligé d'avoir des tables liées.

    J'ai lu aussi le tutoriel de Christophe Le Fustec sur:
    http://ledzeppii.developpez.com/odbc-access/#LII

    Là il dit quelque chose qui m'a posé des questions, je cite:

    Bien qu'ODBC ne soit plus au goût du jour (il y a maintenant OLE DB, ADO), cela reste encore un moyen simple et pratique de se connecter à d'autres systèmes de gestion de base de données.
    C'est particulièrement vrai en ce qui concerne les tables liées.
    Selon lui la connexion ADO reste plus recommandée? Ce n'est pas mon cas. Je devrais donc me pencher davantage sur le sujet, sur tout que dans le futur je pense passer ces applications vers VB.Net.

    Quoi qu'il en soit, ça marche et je vous remercie infiniment, vous tous qui vous êtes penché sur mon problème.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Alfhcg,

    Je n'ai pas compris si, en final, l'accès via ODBC est plus rapide.

    Deux petites choses concernant l'accès direct à SQL Server :
    • dans le code que tu as présenté, je me demande si la partie concernant la connexion directe à SQL Server ne serait pas déclenchée plusieurs fois pour rien (évènement "load"). Dans ce cas, le temps de réponse s'en retrouverait affecté : il serait, peut-être, plus judicieux de l'exécuter une seule fois à l'ouverture de l'application (je ne sais pas si c'est possible) ;
    • dans SQL Server, tu peux, également, créer des index pertinents qui optimiseront les requêtes d'accès aux données.

    Cela si tu veux creuser la piste "directe".

    N'oublies pas le flag .
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Points : 88
    Points
    88
    Par défaut
    Oui en ODBC cela marche très bien.

    Je dois me plonger un peu sur SQLServer dès que j'aurais un peu de temps.

    Quant à l'evenement load il s'agissait d'un test. Je le mettrais sur l'ouverture du formulaire ou bien sur current.

    Merci pour tout. Je marque resolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Requête classeur fermé - La table externe n'est pas au format attendu
    Par Blencastreur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/05/2012, 10h50
  2. Requête trés lente
    Par mercure07 dans le forum SQL
    Réponses: 22
    Dernier message: 29/03/2012, 18h46
  3. Requête très lente
    Par Korben-Dallas dans le forum Requêtes
    Réponses: 10
    Dernier message: 20/07/2011, 14h07
  4. Requêtes très lentes malgré peu de données
    Par The zxeno prophet dans le forum Requêtes
    Réponses: 8
    Dernier message: 12/01/2011, 14h09
  5. [AC-2003] Requête très longue sur table liée AS/400
    Par cortek's dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 20/09/2009, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo