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
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 -- <
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
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 -- <
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