9.5.7 Прочие свойства и методы объекта Recordset
Другие свойства и методы объекта Recordset, методы Close(), GetRows(), GetString(), Save()
Ниже рассказывается о некоторых дополнительных свойствах и методах объекта Recordset, которые используются реже, чем уже рассмотренные:
- свойства AbsolutePage, PageSize, PageCount позволяют использовать группы записей — страницы — для перемещения по Recordset. По умолчанию размер страницы равен 10 записям.
- свойство ActiveCommand позволяет вернуть объект Command, представляющий команду, которая использовалась на источнике при создании Recordset и заполнении его записями. Подробнее про объект Command будет рассказано ниже.
- свойство ActiveConnection возвращает объект Connection, который использовался для создания Recordset. Передать (или получить) строковое значение, на основе которого будет создан объект Connection, можно при помощи свойства Source.
- свойство CacheSize позволяет определить количество записей, которое будет находиться в оперативной памяти на клиенте (остальные записи будут подкачиваться по мере необходимости с источника). Используется тогда, когда количество записей в Recordset очень большое или приходится работать с записями очень большого размера, например, большими двоичными объектами;
- свойства DataSource и DataMember используются только при применении Data Environment и здесь они рассматриваться не будут;
- свойство EditMode позволяет определить состояние текущей записи — не изменялась, изменялась, но изменения еще не переданы на источник, удалена и т.п.
- свойства InsertCommand, DeleteCommand, UpdateColumn позволяют определить объекты Command, представляющие команды, которые будут использоваться на источнике при создании, удалении и изменении записей в Recordset соответственно;
- MarshalOptions — позволяет определить, какие записи при изменении Recordset будут возвращаться с клиента на сервер — все (по умолчанию) или только измененные;
- свойство MaxRecords настоятельно рекомендуется указывать перед открытием для всех Recordset, для которых потенциально возможно получить с источника очень большое количество записей (что может привести к нехватке оперативной памяти на клиенте). Оно определяет максимальное количество записей, которые могут быть скачаны в Recordset. Вместо этого свойства можно использовать и CacheSize.
- свойство State позволяет определить, что в настоящее время происходит с Recordset. Используется одно из 5 значений: открыт, закрыт, соединяется, выполняет команду на источнике или получает оттуда данные.
- свойство Status позволяет определить результат последней операции обновления данных;
- StayInSync — свойство, которое используется только иерархических Recordset. Определяет, будут ли при перемещении родителя перемещаться в иерархии и его дети (по умолчанию) или останутся на месте.
А теперь о методах:
- Cancel() позволяет прервать открытие Recordset (например, если оно затянулось);
- CancelBatch() и CancelUpdate() позволяют отменить внесенные в Recordset изменения (до вызова команды Update()) в разных режимах.
- метод Clone() позволяет скопировать объект Recordset в другой объект Recordset со всеми закладками (обычно используется, когда очень надо иметь более, чем одну текущую запись).
- метод Close() позволяет высвободить память, занимаемую данными Recordset (но не удаляет сам объект). В случае необходимости вы можете опять вызвать метод Open(), чтобы воссоздать этот объект с ранее определенными параметрами (значения свойств объекта Recordset при вызове метода Close() сохраняются).
- CompareBookmarks() позволяет сравнить две закладки и вернуть результат сравнения (указывают на ту же запись, первая выше, первая ниже и т.п.)
- метод GetRows() позволяет вернуть из Recordset двухмерный массив типов Variant. В качестве необязательных параметров принимает стартовую позицию, количество строк, которые нужно поместить в массив, и те столбцы, которые нужно извлечь из Recordset. В нашем примере применение этого метода может выглядеть так:
arr = rs.GetRows
Debug.Print arr(2, 3)
- GetString() — самая простая возможность получить из объекта Recordset строковое значение. По умолчанию разделители между столбцами — символы табуляции, между записями — перевод каретки. Можно использовать в отладочных целях, чтобы посмотреть на Recordset глазами:
Debug.Print rs.GetString
- NextRecordSet() — возможность очистить текущий Recordset и выполнить следующую команду, указанную в методе Open(), если команды были указаны в формате
"select * from dbo.customers; select * from dbo.employees"
Обычно такой подход используется для обработки наборов однотипных таблиц.
- Requery() — повторно выполнить запрос, который использовался для метода Open(), и заново заполнить Recordset.
- Resync() — обновить значения уже полученных записей, скачав их заново из источника. Новые записи при этом видны не будут (в отличие от метода Requery()).
- Save() — возможность сохранения Recordset в файле на диске. Можно использовать формат Microsoft Advanced Data TableGram (ADTG), XML и родной формат провайдера. Например:
rs.Save "C:\rscustomers.xml", adPersistXML
При необходимости можно восстановить сохраненный Recordset из файла, указав соответствующие параметры метода Open().
- SetAllRowsStatus() — возможность изменить значение свойства Status для всех строк Recordset.
- Supports() — возможность выполнить проверку того, что поддерживает данный Recordset (в каких направлениях можно двигаться, поддерживается ли поиск, закладки и т.п.). Те возможности, которые проверяются этим методом, определяются особенностями провайдера (драйвера для подключения к источнику).
Для объекта Recordset предусмотрен также набор событий (EndOfRecordset, FetchComplete, MoveComplete), но используются они нечасто и поэтому здесь рассматриваться не будут.