Метод Recordset2.FillCache (DAO)

Область применения: Access 2013, Office 2013

Заполняет полностью или частично локальный кэш для объекта Recordset, который содержит данные из источника ODBC, подключенного к ядру СУБД Microsoft Access (только для баз данных ODBC, подключенных к Microsoft Access).

Синтаксис

expression . FillCache(Rows, StartBookmark)

Выражение Переменная, представляющая объект Recordset2 .

Параметры

Имя

Обязательный/необязательный

Тип данных

Описание

Rows

Необязательный

Variant

Тип Variant (подтип integer), указывающий количество строк для хранения в кэше. Если этот аргумент не указан, значение определяется параметром свойства CacheSize .

StartBookmark

Необязательный

Variant

Тип Variant (подтип строки), указывающий закладку. Кэш заполняется, начиная с записи, указанной в этой закладке. Если этот аргумент не указан, кэш заполняется, начиная с записи, указанной свойством CacheStart .

Замечания

Кэширование повышает производительность приложения, которое получает данные с удаленного сервера. Кэш — это место в локальной памяти, в которой хранятся данные, недавно полученные с сервера; При этом предполагается, что данные, вероятно, будут запрошены снова во время выполнения приложения. Когда пользователь запрашивает данные, ядро СУБД Microsoft Access сначала проверяет кэш на наличие данных, а не извлекает их с сервера, что занимает больше времени. Кэш не сохраняет данные, которые не поступают из источника данных ODBC.

Вместо того чтобы ждать, пока кэш будет заполнен записями по мере их извлечения, можно использовать метод FillCache для явного заполнения кэша в любое время. Это более быстрый способ заполнения кэша, так как FillCache извлекает несколько записей одновременно, а не по одной за раз. Например, при просмотре каждого экранного фрагмента записей приложение использует FillCache для получения следующего экрана записей для просмотра.

Любой источник данных ODBC, подключенный к ядру СУБД Microsoft Access, к которому вы обращаетесь с помощью объектов Recordset, может иметь локальный кэш. Чтобы создать кэш, откройте объект Recordset из удаленного источника данных, а затем задайте свойства CacheSize и CacheStartнабора записей.

Если строки и начальная метка создают диапазон записей, который частично или полностью выходит за диапазон записей, указанный свойствами CacheSize и CacheStart , часть набора записей за пределами этого диапазона игнорируется и не загружается в кэш.

Если FillCache запрашивает больше записей, чем осталось в удаленном источнике данных, ядро СУБД Microsoft Access извлекает только оставшиеся записи, и ошибка не возникает.

Примечание.

  • Записи, полученные из кэша, не отражают одновременные изменения, внесенные другими пользователями в исходные данные.
  • FillCache извлекает только записи, которые еще не кэшируются. Чтобы принудительно обновить все кэшированные данные, задайте для свойства CacheSizeнабора записей значение 0, сбросьте размер кэша, который вы первоначально запросили, а затем используйте FillCache.

Пример

В этом примере используются методы CreateTableDef и FillCache и свойства CacheSize, CacheStart и SourceTableName для перечисления записей в связанной таблице два раза. Затем выполняется перечисление дважды с кэшем в 50 записей. Затем пример отображает статистику производительности для некэшированных и кэшированных запусков в связанной таблице.

    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