Иллюстрированный самоучитель по Delphi 7 для профессионалов

Сессия. Транзакции. Наборы рядов.

Из объекта-источника данных можно создавать объекты-сессии. Для этого используется метод:

function CreateSession
(const punkOuter: lUnknown; const riid: TGUID; out ppDBSession: lUnknown):
 HResult; stdcall;

…интерфейса iDBCreateSession. Сессия предназначена для обеспечения работы транзакций и наборов рядов.

Транзакции

Управление транзакциями в OLE DB реализовано на двух уровнях. Во-первых, всеми необходимыми методами обладает объект сессии. Он имеет интерфейсы ITransaction, ITransactionJoin, ITransactionLocal, ITransactionObject.

Внутри сессии транзакция управляется интерфейсами ITransactionLocal, ItransactionSC, ITransaction и их методами StartTransaction, Commit, Rollback.

Во-вторых, для объекта сессии можно создать объект транзакции при помощи метода:

function GetTransactionObject
(ulTransactionLevel: UINT; out ppTransactionObject: ITransaction):
HResult; stdcall;

…интерфейса ITransactionObject, который возвращает ссылку на интерфейс объекта-транзакции.

Наборы рядов

Объект-набор рядов является основным объектом ADO, обеспечивающим работу с данными. Он инкапсулирует совокупность рядов из источника данных, механизмы навигации по рядам и поддержания рядов в актуальном состоянии.

Объект сессии имеет обязательный интерфейс IOpenRowset с методом:

function OpenRowset
(const punkOuter: lUnknown; pTablelD: PDBID; plndexID: PDBID; const riid: TGUID;
cPropertySets: UINT; rgPropertySets: PDBPropSetArray; ppRowset: PlUnknown):
HResult; stdcall;

…который открывает необходимый набор рядов.

В зависимости от возможностей источника данных набор рядов может поддерживать различные интерфейсы. Но пять из них являются обязательными:

  • IRowset – обеспечивает навигацию по рядам;
  • IAccessor – обеспечивает представление информации о формате рядов, содержащихся в буфере набора рядов;
  • IRowsetinfo – позволяет получить информацию о наборах рядов (например, число рядов или число обновленных рядов);
  • Icoiumnsinfo – позволяет получить информацию о колонках рядов (наименование, тип данных, возможность обновления и т. д.);
  • IconvertType – содержит единственный метод canConvert, позволяющий определить возможность преобразования типов данных в наборе рядов.

Примечание
В отличие от привычной практики разработки интерфейсов в рамках модели СОМ, интерфейсы OLE DB часто имеют всего один-два метода. В результате большая группа интерфейсов реализует несколько вполне стандартных функций
.

Дополнительные возможности по управлению набором рядов предоставляют следующие интерфейсы:

  • IRowsetchange – выполняет изменения в наборе рядов (вносит изменения, добавляет новые ряды, удаляет ряды и т. д.);
  • IRowsetidentity – позволяет сравнивать ряды разных рядов;
  • IRowsetindex – обеспечивает использование индексов;
  • IRowsetLocate – выполняет поиск в наборе рядов;
  • IRowsetupdate – реализует механизм кэширования изменений.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.