(Значение закладки для текущей строки можно получить из свойства 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) для режимов неотложной модификации и пакетной, соответственно.