Base access 2 200 000 lignes

Signaler
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Bonjour,

je dispose d'une base access (jet pour être exact)
et je souhaite améliorer les temps d'access. (2,2 million d'enregistrement)
mon problème est de trouver les meilleurs réglages.
voici mon code .

en ouverture 4.30 sec avec adUseServer (convenable)
en ouverture plus de 30 sec avec adUseClient (pas bon du tout !)


Private Sub Requete_complete()
On Error GoTo fin

Screen.MousePointer = 11 'sablier
deb = Timer
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.ActiveConnection = CN
.Properties("IrowSetIdentity") = True
.Source = Requete_Articles_Complete
.Open , , adOpenStatic, adLockOptimistic, adCmdText
End With

Set DataGrid1.DataSource = rs
Label30 = Timer - deb
Screen.MousePointer = 0
Exit Sub
fin:
Trape_Erreur Me.name, "Requete_complete"

End Sub

lorsque je recherche dans un champs lors de chaque frappe
le compteur s'affole et je dépasse les 30 sec
j'ai testé avec le curseur AdOpenForwardOnly, mais il ne marche pas avec access

Private Sub txtrech_Change()
If Len(txtrech) > 2 Then 'on entre en recherche au 3eme caratère,
deb = timer
Requete_Articles = Requete_Articles_De_base & _
" where désignation LIKE ""%" & txtRech & "%"" "
Screen.MousePointer = 11 'sablier
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.ActiveConnection = CN
.Properties("IrowSetIdentity") = True
.Source = Requete_Articles
.Open , , adOpenStatic, adLockOptimistic, adCmdText
End With

Set DataGrid1.DataSource = rs
Set Adodc1.Recordset = rs
Label30 = Timer - deb
End if
End Sub

y'a t-il un moyen de naviguer dans le recordset
sans le rédefinir à chaque requete ? (Set rs = New ADODB.Recordset)
merci de votre aide

4 réponses

Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Salut,

Alors j'ai pas regarder ton code complétement...
Par contre peux tu préciser : lorsque je recherche dans un champs lors de chaque frappe
le compteur s'affole et je dépasse les 30 sec
j'ai testé avec le curseur AdOpenForwardOnly, mais il ne marche pas avec access
Ensuite quand tu marque :
y'a t-il un moyen de naviguer dans le recordset
sans le rédefinir à chaque requete ? (Set rs = New ADODB.Recordset)
Tu détruit ton recordset ou tu recharge ton recordset à chaque requete??? Quel type de requete tu fais???
Merci

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

Salut,

je détruit le recordset à chaque fois
que préconises tu ?

sachant que j'ai testé la conservation du recordet et pratiqué
la navigation dans le jeu avec :
rs.find "désignation like '"%toto%'""
qui marche pas mieux
Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Re:

Le fait de détruire ton recordset et de le recharger te fait perdre du temps. ca c'est sur!
Quel est ton temps de traitement en utilisant le find???

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- <
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Il y a la propriete filter sur les recordset
cela doit etre plus facile à gérer.

Regarde si tu peux placer des index

NB ce n'est pas tres conseillé de mettre dans des evenements
comme les appui de touche des requetes
car si tu écris 10 lettre access fait 10-2 requetes comme tu commences au deuxieme caractères.

Regardes du coté de filter.
Enleve le premier % dans la recherche les perf seront améliorée aussi.

Access n'est pas fait pour traiter des grosses tables
Compacte la base ca peut aider aussi.

Sinon il peut etre interessant de passer sur une base sqlserver express

Bon courage