Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : Access 2013, Office 2013
Remplit tout ou partie d'un cache local pour un objet Recordset contenant les données d'une source de données ODBC connectée au moteur de base de données Microsoft Access (bases de données ODBC connectées au moteur de base de données Microsoft Access uniquement).
Syntaxe
expression . FillCache(Rows, StartBookmark)
expression Variable représentant un objet Recordset.
Paramètres
Nom |
Obligatoire/facultatif |
Type de données |
Description |
|---|---|---|---|
Rows |
Facultatif |
Variant |
Variant (sous-type Integer) qui spécifie le nombre de lignes à stocker dans le cache. Si vous omettez cet argument, la valeur est déterminée par le paramètre de propriété CacheSize . |
StartBookmark |
Facultatif |
Variant |
Variant (sous-type String) qui spécifie un signet. Le cache est rempli à partir de l’enregistrement indiqué par ce signet. Si vous omettez cet argument, le cache est rempli à partir de l’enregistrement indiqué par la propriété CacheStart . |
Remarques
La mise en cache améliore les performances des applications qui extraient les données d'un serveur distant. Le cache est un espace au niveau de la mémoire locale qui conserve les dernières données à avoir été extraites du serveur, en partant du postulat que les données seront probablement redemandées pendant l'exécution de l'application. Lorsqu'un utilisateur demande des données, le moteur de base de données Microsoft Access vérifie d'abord si ces données se trouvent dans le cache avant de les extraire directement du serveur, ce qui prend plus de temps. Le cache stocke uniquement les données issues d'une source de données ODBC.
Au lieu d'attendre que le cache ne se remplisse d'enregistrements à mesure de leur extraction, vous pouvez utiliser la méthode FillCache pour remplir à tout moment le cache de façon explicite. Cela permet de remplir le cache plus rapidement dans la mesure où FillCache extrait plusieurs enregistrements à la fois, et non un seul. Par exemple, lorsque vous consultez chaque page-écran d'enregistrements, votre application utilise FillCache pour extraire la prochaine page-écran d'enregistrements à consulter.
Les sources de données ODBC connectées au moteur de base de données Microsoft Access auxquelles vous accédez et qui comportent des objets Recordset peuvent disposer d'un cache local. Pour créer le cache, ouvrez un objet Recordset de la source de données distante, puis définissez les propriétés CacheSize et CacheStart de l'objet Recordset.
Si rows et startbookmark créent une plage d’enregistrements qui se trouve partiellement ou entièrement en dehors de la plage d’enregistrements spécifiée par les propriétés CacheSize et CacheStart , la partie du jeu d’enregistrements en dehors de cette plage est ignorée et ne sera pas chargée dans le cache.
Si FillCache demande plus d'enregistrements qu'il n'en reste dans la source de données distante, le moteur de base de données Microsoft Access n'extrait que les enregistrements restants, et aucune erreur ne se produit.
Remarque
- Les enregistrements extraits du cache ne reflètent pas les modifications concomitantes que d'autres utilisateurs ont éventuellement apportées à la source de données.
- FillCache extrait uniquement les enregistrements qui ne sont pas déjà en cache. Pour forcer une mise à jour de toutes les données mises en cache, définissez la valeur de la propriété CacheSize de l'objet Recordset à 0, redéfinissez-la en lui attribuant la taille du cache que vous avez demandée initialement, puis utilisez 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