Опубликован: 20.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 11:
Реализация доступа к базам данных в среде VISUAL STUDIO.NET на языке С++ с применением ATL
Редактирование результирующего набора
Технология OLE DB позволяет выполнять редактирование результирующего набора, добавляя, удаляя или изменяя записи.
Для выполнения этих действий в классе CRowset реализован интерфейс IRowsetChange, предоставляющий следующие методы:
- SetData - для изменения записи;
- Insert - для добавления записи;
- Delete - для удаления записи.
Для редактирования записей должно быть соответствующим образом установлено значение свойства DBPROP_UPDATABILITY результирующего набора. Это можно выполнить как в мастере ATL OLE DB Consumer, так и впоследствии вызовом метода AddProperty.
Тип поддерживаемого редактирования указывается следующими константами:
- DBPROPVAL_UP_CHANGE - разрешение изменения записи;
- DBPROPVAL_UP_INSERT - разрешение вставки новой записи;
- DBPROPVAL_UP_DELETE - разрешение удаления записи.
Например:
CDBPropSet ps(DBPROPSET_ROWSET); ps.AddProperty(DBPROP_IRowsetChange, true) ps.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE)
На следующей схеме приведена иерархия классов результирующих наборов:
Обновление записей
Метод CRowset::SetData устанавливает значение для одного или нескольких столбцов текущей строки.
Например:
// Класс таблицы основывается на классе записи CTable<CAccessor<CTBL1Accessor> > tbl1; CSession session; // Открываем результирующий набор и переходим // к 10-й строке tbl1.Open(session, "TBL1", &ps, 1); // ps - набор // свойств tbl1.MoveToBookmark(&bookmark, 0); // Предположим, //что закладка установлена на 10-й строке // Изменим значения полей F1 и F2 текущей строки // в таблице TBL1 (устанавливаем значения связанных // полей согласно аксессору) _tcscpy(tbl1.m_F1, _T( "ABCD" ) ); tbl1.m_F2 = 123; // Внесем изменения в таблицу HRESULT hr = tbl1.SetData( );