Запись пользователя
Пользовательская запись предоставляет код и структуру данных, представляющую данные столбца для набора строк.Пользовательская запись может быть создана во время компиляции или выполнения.При создании поставщика с помощью мастера поставщика ATL OLE DB мастер создает пользовательскую запись, имеющую следующий вид (предполагается, что указано имя поставщика [краткое имя] "MyProvider"):
class CWindowsFile:
public WIN32_FIND_DATA
{
public:
BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
};
Шаблоны поставщика OLE DB обрабатывают все характеристики OLE DB, касающиеся взаимодействия с клиентом.Для получения необходимых для отклика данных столбца поставщик вызывает функцию GetColumnInfo, которую необходимо поместить в пользовательскую запись.Можно явно переопределить оператор GetColumnInfo в пользовательской записи, например объявив его в H-файле, как показано ниже:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Это соответствует следующей записи:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Необходимо также обеспечить реализацию GetColumnInfo в CPP-файле пользовательской записи.
Макрос PROVIDER_COLUMN_MAP создает функцию GetColumnInfo:
BEGIN_PROVIDER_COLUMN_MAP определяет прототип функции и статический массив структур ATLCOLUMNINFO.
PROVIDER_COLUMN_ENTRY определяет и инициализирует одну структуру ATLCOLUMNINFO.
END_PROVIDER_COLUMN_MAP закрывает массив и функцию.Он также помещает число элементов массива в параметр pcCols.
Если пользовательская запись создается во время выполнения, GetColumnInfo использует параметр pThis для получения указателя на набор строк или экземпляр команды.Команды и наборы строк должны поддерживать интерфейс IColumnsInfo, чтобы из указателя могли быть извлечены сведения о столбцах.
CommandClass и RowsetClass являются командой и набором строк, использующими пользовательскую запись.
Более подробные примеры переопределения GetColumnInfo в пользовательской записи представлены в разделе Динамическое определение столбцов для возврата потребителю.