Comment substituer un accesseur dynamique?

Lorsque vous utilisez CDynamicAccessor, la méthode ouverte de commande crée un accesseur pour vous automatiquement, basé sur les informations de colonne de l'ensemble de lignes ouvert. Vous pouvez substituer l'accesseur dynamique afin de contrôler exactement comment les colonnes sont liées.

Pour substituer l'accesseur dynamique, passez false comme dernier paramètre à la méthode CCommand::Open . Cela empêche Open de créer un accesseur automatiquement. Vous pouvez ensuite appeler GetColumnInfo et AddBindEntry pour chaque colonne que vous souhaitez lier . Le code suivant montre comment le faire

USES_CONVERSION ;
double dblProductID ;

CCommandlt ;CDynamicAccessor > produit ;
/ / Ouvrez la table, en passant la valeur false pour empêcher le produit de la liaison automatique.Ouvert (session, _T ("Select * de produits »), NULL, false NULL, DBGUID_DEFAULT,) ;

ULONG le nColumns ;
DBCOLUMNINFO * pColumnInfo ;
/ / Obtenir les informations de colonne de l'ensemble de lignes ouvert
produit.GetColumnInfo (nColumns, & pColumnInfo) ;

/ / Lier à l'ID du produit comme une double
pColumnInfo [0] .wtype = DBTYPE_R8 ;
pColumnInfo [0] .ulcolumnsize = 8 ;
produit.AddBindEntry(pColumnInfo[0]) ;

/ / Lier le nom du produit, comme c'est
produit.AddBindEntry(pColumnInfo[1]) ;

/ / Lier le niveau de réapprovisionnement sous forme de chaîne
pColumnInfo [8] .wtype = DBTYPE_STR ;
pColumnInfo [8] .ulcolumnsize = 10 ;
produit.AddBindEntry(pColumnInfo[8]) ;

/ / Nous avons fini spécifiant les liaisons. Aller de l'avant et de se lier
produit.Bind() ;
/ / Libérer la mémoire pour les informations de colonne que nous avons récupérées dans / / précédent appeler GetColumnInfo
CoTaskMemFree(pColumnInfo) ;

char * pszProductName ;
char * pszReorderLevel ;
BOOL bRC ;

/ / Boucle à travers les documents retraçant les informations.
alors que (produit.MoveNext() == S_OK)
{
   bRC = produit.GetValue (1, & dblProductID) ;
   pszProductName = (char **) produit.GetValue(2) ;
   pszReorderLevel = (char **) produit.GetValue(9) ;

ATLTRACE (_T ("Override = % lf \"%s\ "\"%s\"\n"), dblProductID,
      A2T(pszProductName), A2T(pszReorderLevel)) ;
}

Index