Override di una funzione di accesso dinamica
Quando si utilizza una funzione di accesso dinamica quale CDynamicAccessor, il metodo di comando Open crea una funzione di accesso automaticamente, in base alle informazioni di colonna del rowset aperto. È possibile eseguire l'override della funzione di accesso dinamica per controllare con precisione il modo in cui le colonne vengono associate.
Per eseguire l'override della funzione di accesso dinamica, passare false come ultimo parametro al metodo CCommand::Open. In tal modo, è possibile evitare che la funzione di accesso venga creata automaticamente da Open. A questo punto è possibile chiamare GetColumnInfo e AddBindEntry per ogni colonna che si desidera associare. Nel codice che segue viene mostrato come eseguire questa operazione:
USES_CONVERSION;
double dblProductID;
CCommand<CDynamicAccessor> product;
// Open the table, passing false to prevent automatic binding
product.Open(session, _T("Select * FROM Products"), NULL, NULL, DBGUID_DEFAULT, false);
ULONG nColumns;
DBCOLUMNINFO* pColumnInfo;
// Get the column information from the opened rowset.
product.GetColumnInfo(&nColumns, &pColumnInfo);
// Bind the product ID as a double.
pColumnInfo[0].wType = DBTYPE_R8;
pColumnInfo[0].ulColumnSize = 8;
product.AddBindEntry(pColumnInfo[0]);
// Bind the product name as it is.
product.AddBindEntry(pColumnInfo[1]);
// Bind the reorder level as a string.
pColumnInfo[8].wType = DBTYPE_STR;
pColumnInfo[8].ulColumnSize = 10;
product.AddBindEntry(pColumnInfo[8]);
// You have finished specifying the bindings. Go ahead and bind.
product.Bind();
// Free the memory for the column information that was retrieved in
// previous call to GetColumnInfo.
CoTaskMemFree(pColumnInfo);
char* pszProductName;
char* pszReorderLevel;
bool bRC;
// Loop through the records tracing out the information.
while (product.MoveNext() == S_OK)
{
bRC = product.GetValue(1, &dblProductID);
pszProductName = (char*)product.GetValue(2);
pszReorderLevel = (char*)product.GetValue(9);
ATLTRACE(_T("Override = %lf \"%s\" \"%s\"\n"), dblProductID,
A2T(pszProductName), A2T(pszReorderLevel));
}