Quando você usar CDynamicAccessor, o método aberto de comando cria um acessador para você automaticamente, com base nas informações coluna do conjunto de linhas aberto. Você pode substituir o acessador dinâmico para controlar exatamente como as colunas são ligadas.
Para substituir o acessador dinâmico, passe false como o último parâmetro para o método CCommand::Open . Isso impede que aberto criando um acessador automaticamente. Em seguida, você pode chamar GetColumnInfo e chamada AddBindEntry para cada coluna que você deseja ligar. O código a seguir mostra como fazê-lo
USES_CONVERSION;
dblProductID duplo;
CCommandlt;CDynamicAccessor > produto;
/ / Abrir a tabela, passando false para impedir que o produto de vinculação automática.Aberta (sessão, t ("Select * FROM produtos"), NULL, falso NULL, DBGUID_DEFAULT,);
ULONG nColumns;
DBCOLUMNINFO * pColumnInfo;
/ / Obter as informações de coluna do conjunto de linhas aberto
produto.GetColumnInfo (nColumns, & pColumnInfo);
/ / Ligar o ID do produto como um duplo
.wType pColumnInfo [0] = DBTYPE_R8;
.ulColumnSize pColumnInfo [0] = 8;
produto.AddBindEntry(pColumnInfo[0]);
/ / Ligar o nome do produto, pois é
produto.AddBindEntry(pColumnInfo[1]);
/ / Vincular o nível de reposição como uma Cadeia de caracteres
pColumnInfo [8] .wtype = DBTYPE_STR;
.ulColumnSize pColumnInfo [8] = 10;
produto.AddBindEntry(pColumnInfo[8]);
/ / Nós terminar de especificar as ligações. Vá em frente e vincular
produto.BIND ();
/ / Libera a memória para as informações de coluna que nós recuperados em / / anterior chamar GetColumnInfo
CoTaskMemFree(pColumnInfo);
Char * pszProductName;
Char * pszReorderLevel;
bool bRC;
/ / Loop através dos registros de rastreamento das informações.
ao mesmo tempo (produto.MoveNext() = = S_OK)
{
bRC = produto.GetValue (1, & dblProductID);
pszProductName = (char) produto.GetValue(2);
pszReorderLevel = (char) produto.GetValue(9);
ATLTRACE ( t ("Override = % lf \"%s\ "\"%s\"\n"), dblProductID,
A2T(pszProductName), A2T(pszReorderLevel));
}