Базы данных и ADO Прочие свойства и методы объекта Recordset

          Назад



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), но используются они нечасто и поэтому здесь рассматриваться не будут.




Далее