Московский государственный университет имени М.В.Ломоносова
Опубликован: 20.12.2005 | Доступ: свободный | Студентов: 3142 / 371 | Оценка: 4.22 / 3.86 | Длительность: 12:03:00
ISBN: 978-5-9556-0068-0
Лекция 11:

Реализация доступа к базам данных в среде VISUAL STUDIO.NET на языке С++ с применением ATL

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >

Редактирование результирующего набора

Технология 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( );
< Лекция 10 || Лекция 11: 12345 || Лекция 12 >