Recordset.CacheSize, propriété (DAO)
S’applique à : Access 2013, Office 2013
Définit ou renvoie le nombre d'enregistrements extraits d'une source de données ODBC qui seront placés dans le cache local. Long (en lecture/écriture).
Syntaxe
expression . CacheSize
expression Variable représentant un objet Recordset.
Remarques
La valeur de la propriété CacheSize doit être comprise entre 5 et 1200 mais ne peut pas être supérieure à ce que la mémoire disponible autorise. 100 est une valeur communément utilisée. Si la propriété a la valeur 0, la mise en cache est désactivée.
La mise en cache des données améliore les performances si vous utilisez des objets Recordset pour récupérer des données à partir d’un serveur distant. Un cache est un espace dans la mémoire locale qui contient les données les plus récemment récupérées à partir du serveur ; Cela est utile si les utilisateurs demandent à nouveau les données pendant l’exécution de l’application. Lorsque les utilisateurs demandent des données, le moteur de base de données Microsoft Access vérifie d’abord les données demandées dans le cache au lieu de les récupérer à partir du serveur, ce qui prend plus de temps. Le cache enregistre uniquement les données provenant d’une source de données ODBC.
N'importe quelle source de données ODBC connectée au moteur de base de données Microsoft Access, telle qu'une table liée, peut posséder un cache local. Pour créer le cache, ouvrez un objet Recordset à partir de la source de données distante, définissez les propriétés CacheSize et CacheStart puis utilisez la méthode FillCache ou parcourez les enregistrements à l'aide des méthodes Move.
Vous pouvez définir le paramètre de la propriété CacheSize sur la base du nombre d'enregistrements que votre application est capable de traiter simultanément. Si, par exemple, vous utilisez un objet Recordset comme source des données à afficher à l'écran, vous pouvez attribuer à la propriété CacheSize la valeur 20 afin d'afficher 20 enregistrements à la fois.
Le moteur de base de données Microsoft Access demande au cache les enregistrements compris dans la plage du cache et demande au serveur les enregistrements hors cache.
Les enregistrements extraits du cache ne reflètent pas les modifications concomitantes apportées par d'autres utilisateurs à la source de données.
Pour forcer une mise à jour de toutes les données mises en cache, affectez à la propriété CacheSize de l'objet Recordset la valeur 0, réaffectez-lui une valeur correspondant à la taille du cache initialement demandé puis utilisez la méthode FillCache.
Exemple
Cet exemple utilise les méthodes CreateTableDef et FillCache ainsi que les propriétés CacheSize, CacheStart et SourceTableName pour énumérer deux fois les enregistrements dans une table liée. Ensuite, il énumère également deux fois les enregistrements avec un cache de 50 enregistrements. Enfin, il affiche les statistiques de performance pour les deux exécutions, avec et sans mise en cache, dans la table liée.
Sub ClientServerX3()
Dim dbsCurrent As Database
Dim tdfRoyalties As TableDef
Dim rstRemote As Recordset
Dim sngStart As Single
Dim sngEnd As Single
Dim sngNoCache As Single
Dim sngCache As Single
Dim intLoop As Integer
Dim strTemp As String
Dim intRecords As Integer
' Open a database to which a linked table can be
' appended.
Set dbsCurrent = OpenDatabase("DB1.mdb")
' Create a linked table that connects to a Microsoft SQL
' Server database.
Set tdfRoyalties = _
dbsCurrent.CreateTableDef("Royalties")
' Note: The DSN referenced below must be set to
' use Microsoft Windows NT Authentication Mode to
' authorize user access to the Microsoft SQL Server.
tdfRoyalties.Connect = _
"ODBC;DATABASE=pubs;DSN=Publishers"
tdfRoyalties.SourceTableName = "roysched"
dbsCurrent.TableDefs.Append tdfRoyalties
Set rstRemote = _
dbsCurrent.OpenRecordset("Royalties")
With rstRemote
' Enumerate the Recordset object twice and record
' the elapsed time.
sngStart = Timer
For intLoop = 1 To 2
.MoveFirst
Do While Not .EOF
' Execute a simple operation for the
' performance test.
strTemp = !title_id
.MoveNext
Loop
Next intLoop
sngEnd = Timer
sngNoCache = sngEnd - sngStart
' Cache the first 50 records.
.MoveFirst
.CacheSize = 50
.FillCache
sngStart = Timer
' Enumerate the Recordset object twice and record
' the elapsed time.
For intLoop = 1 To 2
intRecords = 0
.MoveFirst
Do While Not .EOF
' Execute a simple operation for the
' performance test.
strTemp = !title_id
' Count the records. If the end of the
' cache is reached, reset the cache to the
' next 50 records.
intRecords = intRecords + 1
.MoveNext
If intRecords Mod 50 = 0 Then
.CacheStart = .Bookmark
.FillCache
End If
Loop
Next intLoop
sngEnd = Timer
sngCache = sngEnd - sngStart
' Display performance results.
MsgBox "Caching Performance Results:" & vbCr & _
" No cache: " & Format(sngNoCache, _
"##0.000") & " seconds" & vbCr & _
" 50-record cache: " & Format(sngCache, _
"##0.000") & " seconds"
.Close
End With
' Delete linked table because this is a demonstration.
dbsCurrent.TableDefs.Delete tdfRoyalties.Name
dbsCurrent.Close
End Sub