Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2011, 01h24   #1
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
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 :
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
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 10h08   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 12h05   #3
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
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.
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 12h12   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h12   #5
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
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.
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h25   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 20h49   #7
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
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:

Citation:
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.
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 10h02   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 00h19   #9
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
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.
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h08.


 
 
 
 
Partenaires

Hébergement Web