Смекни!
smekni.com

Введение в ADO (стр. 3 из 3)

(Значение закладки для текущей строки можно получить из свойства Bookmark выборки. Если сохранить это значение в какой-либо переменной, то потом его можно присвоить свойству Bookmark и снова сделать эту строку текущей. Проверить, что набор записей поддерживает закладки можно с помощью метода Support() объекта Recordset.)

на требуемую начальную запись).

ADO Recordset позволяет производить так называемый постраничный просмотр выборки. Для этого необходимо свойстве в PageSize объекта Recordset указать количество строк, составляющих одну страницу. При этом из свойства PageCount можно узнать о количестве страниц в выборке.

7.4. Модификация данных.

Вставка строк в Recordset осуществляется посредством методов AddNew() и Update().

Метод AddNew() непосредственно добавляет новую строку (и делает ее текущей) в наборе записей.

HRESULT AddNew(const _variant_t & FieldList, const _variant_t &Values);

FieldList - массив имен или номеров инициализируемых в строке полей.

Values - массив инициализирующих значений для этих полей.

Далее строку можно модифицировать с помощью объектов коллекции Fields (если это необходимо), после чего изменения можно сохранить в базе данных, вызвав метод Update() (если при вызове метода AddNew() в него передавались инициализирующие значения, Update() вызывать не надо).

HRESULT Update(const _variant_t &FieldList, const _variant_t &Values);

Как видно из определения, в Update(…), так же как и в AddNew(…) можно передавать массив имен (или номеров) модифицируемых полей и новые значения.

Пример добавления записи:

pRst->AddNew();

pRst->Fields->Item["au_lname"]->Value = _bstr_t("Усов");

pRst->Fields->Item["au_fname"]->Value = _bstr_t("ВиталийМ.");

pRst->Update();

Удалить запись в наборе записей можно с помощью метода Delete(…) объекта Recordset.

HRESULT Delete(enum AffectEnum AffectRecords);

AffectRecords принимает одно из следующих значений:

adAffectCurrent - удалить текущую строку(по умолчанию)

adAffectGroup - удаляет все строки, удовлетворяющие критерию свойства Filter.

adAffectAll - удаляет все записи.

adAffectAllChapters - удаляет все записи главы. (ссылка на диапазон строк источника данных. Как правило, ссылка на другой Recordset. Глава позволяет реализовать отношения наследник-родитель между объектами Recordset.)

Если Recordset находится в режиме непосредственного редактирования, то помеченные строки удаляются немедленно в источнике данных. Если же применяется режим пакетной модификации (наконец-то и до него дошли), то строки удалятся после вызова метода UpdateBatch().

Что же такое "режим пакетной модификации"??? Все очень просто - некоторые поставщики данных позволяют кэшировать выборки локально, вносить в них изменения и потом передавать всю выборку (или изменения в ней) источнику данных одновременно в одном пакете (а не по одной строке). Как отмечалось выше, для использования пакетной модификации необходимо при создании объекта Recordset использовать флаг adLockBatchOptimistic. Для передачи изменений в выборке источнику данных в пакетном режиме необходимо вызвать метод

HRESULT UpdateBatch(AffectEnum AffectRecords);

Где AffectRecords:

adAffectCurrent - обновить текущую строку(по умолчанию)

adAffectGroup - обновить все строки, удовлетворяющие критерию свойства Filter.

adAffectAll - обновить все записи.

adAffectAllChapters - обновить все записи главы. (ссылка на диапазон строк источника данных. Как правило, ссылка на другой Recordset. Глава позволяет реализовать отношения наследник-родитель между объектами Recordset.)

Если после модификации данных вы решили отменить изменения, сделать это можно с помощью методов CancelUpdate() и CancelBatch(AffectEnum AffectRecords) для режимов неотложной модификации и пакетной, соответственно.