Záznam uživatele
Uživatelský záznam poskytuje kód a datovou strukturu, které představují sloupec dat pro sadu řádků. Uživatelský záznam může být vytvořen během kompilace nebo za běhu. Při vytvoření zprostředkovatele použitím průvodce rozhraní OLE DB knihovny ATL, vytvoří průvodce výchozí uživatelský záznam, který bude vypadat takto (za předpokladu, že jste specifikovali název zprostředkovatele [short name] "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()
};
Šablony zprostředkovatele technologie OLE DB zpracují všechny specifikace technologie OLE DB týkající se interakce s klientem. K získání sloupce dat potřebných pro odpověď, zprostředkovatel zavolá funkci GetColumnInfo, kterou je nutné umístit v záznamu uživatele. Můžete explicitně přepsat v uživatelském záznamu GetColumnInfo například pomocí deklarování v soubouru .h, jak je znázorněno zde:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Jedná se o ekvivalent:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Musíte také implementovat GetColumnInfo v uživatelských záznamech souboru .cpp.
Makra PROVIDER COLUMN MAP ve vytváření funkce GetColumnInfo:
BEGIN_PROVIDER_COLUMN_MAP definují prototyp funkce a statické pole struktur ATLCOLUMNINFO.
PROVIDER_COLUMN_ENTRY definuje a inicializuje jediné ATLCOLUMNINFO.
END_PROVIDER_COLUMN_MAP zavře pole a funkci. Také umístí pole elementu počítání do parametru pcCols.
Když je uživatelský záznam vytvořen za běhu, funkce GetColumnInfo použije parametr pThis k obdržení ukazatele na sadu řádků nebo na instanci příkazu. Příkazy a sady řádků musí podporovat rozhraní IColumnsInfo, takže informace o sloupci lze získat z tohoto ukazatele.
CommandClass a RowsetClass jsou příkazy a sady řádků, které používají uživatelský záznam.
Pro více podrobných příkladů jak přepsat uživatelský záznam GetColumnInfo naleznete v Dynamické určení sloupců vrácených příjemci.