Partager via


Enregistrements utilisateur

Pour utiliser un accesseur statique, c'est-à-dire un accesseur dérivé de la classe CAccessor, le consommateur doit disposer d'un enregistrement utilisateur. L'enregistrement utilisateur est une classe C++ qui contient des éléments de données pour gérer les entrées et les sorties. L'Assistant Consommateur OLE DB ATL génère un enregistrement utilisateur pour le consommateur. Vous pouvez ajouter des méthodes à l'enregistrement utilisateur pour des tâches facultatives telles que la gestion des commandes.

Le code ci-après montre un exemple d'enregistrement qui gère les commandes. Dans l'enregistrement d'utilisateur, BEGIN_COLUMN_MAP représente un ensemble de lignes de données passées au consommateur par un fournisseur. BEGIN_PARAM_MAP représente un jeu de paramètres de commande. Cet exemple utilise une classe CCommand pour gérer les paramètres des commandes. Les données membres dans les entrées de mappage représentent des offsets dans un seul bloc contigu de la mémoire pour chaque instance de la classe. Les macros COLUMN_ENTRY correspondent aux macros PROVIDER_COLUMN_ENTRY côté fournisseur.

Pour plus d'informations sur les macros COLUMN_MAP et PARAM_MAP, consultez Macros pour les modèles du consommateur 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()
};

Enregistrements utilisateur générés par l'Assistant

Si vous utilisez l'Assistant Consommateur OLE DB ATL pour générer un consommateur, vous aurez le choix entre les options Modèles OLE DB et Attributs OLE DB. Le code généré diffère à chaque fois. Pour plus d'informations sur ce code, consultez Classes de consommateur générées par l'Assistant.

Prise en charge d'accesseurs multiples par des enregistrements utilisateur

Pour une description complète des scénarios dans lesquels vous devez utiliser plusieurs accesseurs, consultez Utilisation de plusieurs accesseurs dans un jeu de lignes.

L'exemple suivant montre l'enregistrement utilisateur modifié pour prendre en charge plusieurs accesseurs sur le jeu de lignes. À la place de BEGIN_COLUMN_MAP et de END_COLUMN_MAP, il utilise BEGIN_ACCESSOR_MAP et BEGIN_ACCESSOR pour chaque accesseur. La macro BEGIN_ACCESSOR spécifie le numéro de l'accesseur (offset à partir de zéro) et indique si l'accesseur est un auto-accesseur. Les auto-accesseurs appellent GetData pour récupérer les données automatiquement via un appel à MoveNext. Les accesseurs non automatiques exigent une récupération explicite des données. Utilisez un accesseur non automatique si vous établissez une liaison avec un vaste champ de données (une image bitmap, par exemple) que vous ne souhaitez peut-être pas récupérer pour chaque enregistrement.

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()
};

Voir aussi

Concepts

Modèles du consommateur OLE DB (C++)