Bonjour je m'attaque aujourd'hui à de l'optimisation de mon application.
Bien qu'ayant lu la FAQ access concernant cette tâche, une question continue de me tarauder l'esprit:
Optimise ton plus les traitements en passant par du sql directe (update [table] set ...) ou bien en passant par les objets DAO.RECORDSET
exemple de code ci-dessus, lequel des traitements serait le lus optimisé et le plus rapide :
bloc 1
vs
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 Dim myRs As DAO.Recordset 'Begin the transaction myWrk.BeginTrans 'start an update throught the recordset Set myRs = myDb.OpenRecordset("Category") myRs.Filter = "category_id = " & Me.Id With myRs .Edit .Fields("Label") = Me.Label .Fields("Description") = Me.Description .Fields("TicketFlag") = Me.TicketFlag .Fields("UpdatedBy") = Me.UpdatedBy .Fields("UpdateDate") = Me.UpdateDate .Update End With 'commit the transaction myWrk.CommitTrans dbForceOSFlush set myRs = nothing
bloc 2
Je precise que pour un insert, il est dit que passer par un recordset prend le traitement plus rapide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Dim reqSQL As String reqSQL = "update [category] set [label] = '" & param label & '" where category_id = 1 'Begin the transaction myWrk.BeginTrans Docmd.runSQL(reqSQL) 'commit the transaction myWrk.CommitTrans dbForceOSFlush set myRs = nothing
http://access.developpez.com/faq/?page=SQL#PerfReqL'utilisation d'un Recordset rend le traitement plus rapide.
Il est possible que la différence soit due au fait que le Recordset travaille avec la mémoire avant d'écrire sur le disque, alors que n requêtes provoquent n accès disque.
Partager