Поделиться через


Записи пользователя

Чтобы воспользоваться классом статического доступа (то есть классом, производным от CAccessor), потребитель должен иметь запись пользователя.Запись пользователя — это класс C++, который содержит элементы данных для обработки ввода или вывода.Мастер потребителей OLE DB библиотеки ATL создает запись пользователя для поставщика.Можно добавить к записи пользователя дополнительные методы для решения второстепенных задач, например, обработки команд.

Ниже приведен пример записи, обрабатывающей команды.Макрос BEGIN_COLUMN_MAP в записи пользователя представляет набор строк данных, передаваемых потребителю от поставщика.Макрос BEGIN_PARAM_MAP представляет набор параметров команды.Для обработки параметров команды в этом примере используется класс CCommand.Члены данных в записях карты представляют собой смещения в одном непрерывном блоке памяти для каждого экземпляра класса.Макрос COLUMN_ENTRY соответствует макросу PROVIDER_COLUMN_ENTRY на стороне поставщика.

Дополнительные сведения о макросах COLUMN_MAP и PARAM_MAP см. в разделе Макросы для шаблонов потребителей OLE DB.

class CArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_COLUMN_MAP(CArtists)
   COLUMN_ENTRY(1, m_szFirstName)
   COLUMN_ENTRY(2, m_szLastName)
   COLUMN_ENTRY(3, m_nAge)
END_COLUMN_MAP()
 
// Parameter binding map
BEGIN_PARAM_MAP(CArtists)
   COLUMN_ENTRY(1, m_nAge)
END_PARAM_MAP()
};

Записи пользователя, созданные мастером

При использовании мастера потребителей OLE DB библиотеки ATL для создания потребителя существует выбор — применять шаблоны OLE DB или атрибуты OLE DB.Генерируемый код будет отличаться в каждом случае.Дополнительные сведения об этом коде см. в разделе Классы потребителя, созданные мастером.

Поддержка записей пользователя для нескольких объектов доступа

Подробное рассмотрение скриптов, в которых необходимо использование нескольких объектов доступа, см. в разделе Использование нескольких объектов доступа к набору строк.

В следующем примере показана запись пользователя, измененная с целью поддержки использования нескольких объектов доступа к набору строк.Вместо макросов BEGIN_COLUMN_MAP и END_COLUMN_MAP для каждого объекта доступа используются макросы BEGIN_ACCESSOR_MAP и BEGIN_ACCESSOR.Макрос BEGIN_ACCESSOR указывает номер объекта доступа (начиная с нуля) и то, является ли объект доступа автоматическим.Автоматические объекты доступа при каждом вызове функции MoveNext вызывают функцию GetData для автоматического извлечения данных.Неавтоматические объекты доступа требуют явного извлечения данных.Использовать неавтоматические объекты доступа следует в тех случаях, если выполняется привязка к полю крупного размера (например, растровое изображение), которое было бы нежелательно извлекать для каждой записи.

class CMultiArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_ACCESSOR_MAP(CMultiArtists, 2)
   BEGIN_ACCESSOR(0, true)    // true specifies an auto accessor
    COLUMN_ENTRY(1, m_szFirstName)
    COLUMN_ENTRY(2, m_szLastName)
   END_ACCESSOR()
   BEGIN_ACCESSOR(1, false)   // false specifies a manual accessor
    COLUMN_ENTRY(3, m_nAge)
   END_ACCESSOR()
END_ACCESSOR_MAP()
};

См. также

Основные понятия

Шаблоны потребителей OLE DB (C++)