Uživatelský záznam
Poznámka:
Průvodce zprostředkovatelem ATL OLE DB není v sadě Visual Studio 2019 a novější k dispozici.
Záznam uživatele poskytuje kód a datovou strukturu, která představuje data sloupce pro sadu řádků. Záznam uživatele lze vytvořit v době kompilace nebo v době běhu. Když vytvoříte zprostředkovatele pomocí Průvodce zprostředkovatelem ATL OLE DB, průvodce vytvoří výchozí záznam uživatele, který vypadá takto (za předpokladu, že jste zadali název zprostředkovatele [krátký název] 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 OLE DB zpracovávají všechna specifika OLE DB při interakci s klientem. Pokud chcete získat data sloupce potřebná pro odpověď, poskytovatel zavolá GetColumnInfo
funkci, kterou musíte umístit do záznamu uživatele. Záznam uživatele můžete explicitně přepsat GetColumnInfo
tak, že ho například deklarujete v souboru .h, jak je znázorněno tady:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
To odpovídá:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Pak implementujte GetColumnInfo
do souboru .cpp záznamu uživatele.
Makra PROVIDER_COLUMN_MAP pomáhají při vytváření GetColumnInfo
funkce:
BEGIN_PROVIDER_COLUMN_MAP definuje prototyp funkce a statické pole
ATLCOLUMNINFO
struktur.PROVIDER_COLUMN_ENTRY definuje a inicializuje jeden
ATLCOLUMNINFO
.END_PROVIDER_COLUMN_MAP zavře pole a funkci. Umístí také počet prvků pole do parametru pcCols .
Při vytvoření záznamu uživatele za běhu GetColumnInfo
pomocí parametru pThis
obdrží ukazatel na sadu řádků nebo instanci příkazu. Příkazy a sady řádků musí podporovat IColumnsInfo
rozhraní, takže informace o sloupci mohou být převzaty z tohoto ukazatele.
CommandClass
a RowsetClass
jedná se o příkaz a sadu řádků, které používají záznam uživatele.
Podrobnější příklad přepsání GetColumnInfo
v záznamu uživatele najdete v tématu Dynamické určování sloupců vrácených příjemci.