Описание
Заполняет частично или полностью локальный буфер объекта Recordset, содержащего данные из источника данных ODBC, подключенного к ядру Microsoft Jet (только для баз данных ODBC, подключенных к Microsoft Jet).
наборЗаписей.FillCache строки, начало
Параметры
наборЗаписей
Объектная переменная, представляющая объект Recordset, созданный на основе источника данных ODBC, такого как объект TableDef, представляющий присоединенную таблицу или объект QueryDef, созданный на основе такого объекта TableDef.
строки
Необязательный. Выражение или переменная типа Variant (подтип Integer), указывающая число строк, которые следует поместить в локальный буфер. Если данный аргумент опущен, то число заполняемых строк будет определяться значением свойства CacheSize.
начало
Необязательный. Выражение или переменная типа Variant (подтип String), определяющая закладку. Заполнение буфера начнется с записи, на которую указывает закладка. Если значение данного аргумента не задано, то по умолчанию заполнение начнется с записи, определяемой значением свойства CacheStart.
Замечания
Использование буферов повышает быстродействие приложения, в котором данные загружаются с удаленного сервера. Локальный буфер представляет собой область памяти, в которой содержатся данные, полученные с сервера во время последних обращений. Буфер обеспечивает возможность повторного обращения к помещенным в него данным во время выполнения приложения. При поступлении требования на определенные данные ядро базы данных Microsoft Jet сначала проверяет, не содержатся ли запрошенные данные в локальном буфере, прежде чем запросить данные с сервера. На последнюю операцию уходит намного больше времени. Данные, которые поступают из источника данных, не являющегося источником ODBC, в локальном буфере не сохраняются.
Вместо того чтобы ожидать заполнения буфера записями по мере обращения к серверу, можно явно заполнить локальный буфер в любой момент с помощью метода FillCache. Данный метод заполнения буфера является более быстрым, поскольку метод FillCache запрашивает с сервера сразу несколько записей, а не по одной записи за обращение. Например, пока на экран выводится определенная порция данных, можно вызвать в приложении метод FillCache для получения с сервера следующей порции данных.
Создание локального буфера допускается для объекта Recordset при подключении ядра Microsoft Jet к любому источнику данных ODBC. Для создания локального буфера следует открыть объект Recordset на основе удаленного источника данных, а затем задать значения свойств CacheSize и CacheStart объекта Recordset.
Если аргументы строки и начало задают диапазон записей, который частично или полностью выходит за пределы области, определяемой с помощью свойств CacheSize и CacheStart, то часть набораЗаписей, находящаяся вне заданной области, игнорируется и не загружается в локальный буфер.
Если метод FillCache запрашивает больше записей, чем остается в удаленном источнике данных, то в локальный буфер передаются только остающиеся записи; ошибка при этом не возникает.
Полученные из локального буфера записи не отражают изменений, внесенных другими пользователями в записи источника данных после заполнения буфера.
Метод FillCache помещает в буфер только записи, которые еще не содержатся в буфере. Для принудительного обновления всего содержимого буфера следует присвоить значение 0 свойству CacheSize объекта Recordset, после чего задать первоначальное значение размера буфера и вызвать метод FillCache.
Пример
В данном примере методы CreateTableDef и FillCache и свойства CacheSize, CacheStart и SourceTableName используются, чтобы дважды перебрать все записи в присоединенной таблице, первый раз без временного буфера и второй с временным буфером на 50 записей. Далее выводятся статистические данные о выполнении этой операции с временным буфером и без него.
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 ' Открывает базу данных, в которую будет добавлена ' присоединенная таблица. Set dbsCurrent = OpenDatabase("DB1.mdb") ' Создает таблицу, присоединенную к базе данных ' Microsoft SQL Server. Set tdfRoyalties = dbsCurrent.CreateTableDef("Отчисления") tdfRoyalties.Connect = "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers" tdfRoyalties.SourceTableName = "roysched" dbsCurrent.TableDefs.Append tdfRoyalties Set rstRemote = dbsCurrent.OpenRecordset("Отчисления") With rstRemote ' Дважды перебирает записи в объекте Recordset ' и определяет затраченное время. sngStart = Timer For intLoop = 1 To 2 .MoveFirst Do While Not .EOF ' Выполняет простую операцию ' для проверки быстродействия. strTemp = !title_id .MoveNext Loop Next intLoop sngEnd = Timer sngNoCache = sngEnd - sngStart ' Помещает в буфер первые 50 записей. .MoveFirst .CacheSize = 50 .FillCache sngStart = Timer ' Дважды перебирает записи в объекте Recordset ' и определяет затраченное время. For intLoop = 1 To 2 intRecords = 0 .MoveFirst Do While Not .EOF ' Выполняет простую операцию ' для проверки быстродействия. strTemp = !title_id ' Подсчитывает записи. Если достигнут конец ' буфера, то в буфер помещаются ' следующие 50 записей. intRecords = intRecords + 1 .MoveNext If intRecords Mod 50 = 0 Then .CacheStart = .Bookmark .FillCache End If Loop Next intLoop sngEnd = Timer sngCache = sngEnd - sngStart ' Выводит результаты. MsgBox "Сравнение результатов:" & vbCr & " Без буфера: " & Format(sngNoCache, _ "##0.000") & " секунд" & vbCr & " С буфером на 50 записей: " & Format(sngCache, _ "##0.000") & " секунд" .Close End With ' Удаляет присоединенную таблицу, созданную для демонстрации. dbsCurrent.TableDefs.Delete tdfRoyalties.Name dbsCurrent.Close End Sub