Compartir a través de


Método Recordset2.FillCache (DAO)

Se aplica a: Access 2013, Office 2013

Rellena parcial o totalmente una memoria caché local de un objeto Recordset que contiene datos de un origen de datos ODBC conectado al motor de base de datos de Microsoft Access (solo bases de datos ODBC conectadas al motor de base de datos de Microsoft Access).

Sintaxis

expresión . FillCache(Rows, StartBookmark)

Expresión Variable que representa un objeto Recordset2 .

Parameters

Nombre

Obligatorio/opcional

Tipo de datos

Descripción

Rows

Opcional

Variant

Variant (subtipo Integer) que especifica el número de filas que se van a almacenar en caché. Si omite este argumento, el valor viene determinado por el valor de la propiedad CacheSize .

StartBookmark

Opcional

Variant

Variant (subtipo String) que especifica un marcador. La caché se rellena empezando por el registro indicado por este marcador. Si omite este argumento, la memoria caché se rellena a partir del registro indicado por la propiedad CacheStart .

Comentarios

El almacenamiento en caché mejora el rendimiento de una aplicación que recupera datos de un servidor remoto. Una caché es un espacio en una memoria local que conserva los datos recuperados más recientemente del servidor; esto supone que es muy posible que los datos se soliciten de nuevo cuando se ejecute la aplicación. Cuando un usuario solicita datos, el motor de base de datos de Microsoft Access comprueba en la caché los primeros datos en lugar de recuperarlos desde el servidor, lo que tarda más tiempo. La caché no guarda datos que no proceden de un origen de datos ODBC.

En vez de esperar a que se llene la caché con los registros según se vayan recuperando, puede utilizar el método FillCache para llenar de forma explícita la caché en cualquier momento. Esto es más rápido que llenar la caché porque FillCache recupera varios registros a la vez en lugar de uno en uno. Por ejemplo, mientras ve cada pantalla de registros, la aplicación utiliza FillCache para recuperar la siguiente pantalla de registros que va a mostrar.

Cualquier origen de datos ODBC conectado al motor de base de datos de Microsoft Access al que obtenga acceso con objetos Recordset puede tener una memoria caché local. Para crear la memoria caché, abra un objeto Recordset desde el origen de datos remoto y, a continuación, establezca las propiedades CacheSize y CacheStart del objeto Recordset.

Si las filas y startbookmark crean un intervalo de registros que está parcial o totalmente fuera del intervalo de registros especificado por las propiedades CacheSize y CacheStart , la parte del conjunto de registros fuera de este intervalo se omite y no se cargará en la memoria caché.

Si FillCache solicita más registros que el número restante en el origen de datos remoto, el motor de base de datos de Microsoft Access recupera sólo los registros restantes y no se producen errores.

Nota:

  • Los registros recuperados de la caché no reflejan los cambios concurrentes realizados por otros usuarios en el origen de datos.
  • FillCache solo recupera los registros que aún no están almacenados en la memoria caché. Para forzar una actualización de todos los datos almacenados en la memoria caché, establezca la propiedad CacheSize del objeto Recordset en 0, restablézcala al tamaño de la memoria caché que solicitó originalmente y, a continuación, use FillCache.

Ejemplo

En este ejemplo se utilizan los métodos CreateTableDef y FillCache, y las propiedades CacheSize, CacheStart y SourceTableName para enumerar los registros de una tabla vinculada dos veces. A continuación, se enumeran los registros dos veces con una caché de 50 registros. En este ejemplo se muestran luego las estadísticas de rendimiento para las ejecuciones almacenadas y no almacenadas en caché a través de la tabla vinculada.

    Sub ClientServerX3() 
     
       Dim dbsCurrent As Database 
       Dim tdfRoyalties As TableDef 
       Dim rstRemote As Recordset2 
       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