Freigeben über


Überschreiben eines dynamischen Accessors

Wenn Sie einen dynamischen Accessor (z. B. CDynamicAccessor) verwenden, erstellt die Open-Methode auf der Grundlage der Spalteninformationen des geöffneten Rowsets automatisch einen Accessor. Sie können den dynamischen Accessor überschreiben, damit Sie die Spaltenbindung exakt steuern können.

Um den dynamischen Accessor zu überschreiben, übergeben Sie der CCommand::Open-Methode false als letzten Parameter. Dadurch wird verhindert, dass Open automatisch einen Accessor erstellt. Anschließend können Sie GetColumnInfo aufrufen und AddBindEntry für jede zu bindende Spalte aufrufen. Im folgenden Code wird dies veranschaulicht:

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

Siehe auch

Konzepte

Verwenden von Accessoren