Wie ich einen dynamischen Accessor überschreiben.?

Wenn Sie CDynamicAccessorverwenden, erstellt die Befehl Open -Methode einen Accessor für Sie automatisch auf der Grundlage der Spalteninformationen des geöffneten Rowsets. Sie können den dynamischen Accessor zu steuern, wie genau die Spalten gebunden sind überschreiben.

Um den dynamischen Accessor überschreiben, übergeben Sie false als letzten Parameter der CCommand:: Open -Methode. Dies verhindert, dass Open automatisch einen Accessor erstellen. Dann können Sie GetColumnInfo aufrufen, und rufen AddBindEntry für jede Spalte, die Sie binden möchten. Der folgende Code zeigt, wie es zu tun

DAS USES_CONVERSION;
doppelte DblProductID;

CCommandlt;CDynamicAccessor > Produkt;
/ / Öffnen Sie die Tabelle, die Übergabe von false, automatische Bindung Produkt zu verhindern.Offen (Session, _T ("wählen Sie * aus Produkte"), NULL, NULL, DBGUID_DEFAULT, False);

ULONG nColumns;
DBCOLUMNINFO * pColumnInfo;
/ / Get die Spalteninformationen aus der geöffneten Rowset
Produkt.GetColumnInfo (nColumns & pColumnInfo);

/ / Die Produkt-ID als Double bind
pColumnInfo [0] .wtype = DBTYPE_R8;
pColumnInfo [0] .ulcolumnsize = 8;
Produkt.AddBindEntry(pColumnInfo[0]);

/ / Name des Produkts bind, wie es ist
Produkt.AddBindEntry(pColumnInfo[1]);

/ / Bind den Mindestbestand als Zeichenfolge
pColumnInfo [8] .wtype = DBTYPE_STR;
pColumnInfo [8] .ulcolumnsize = 10;
Produkt.AddBindEntry(pColumnInfo[8]);

/ / Wir haben fertig, die Bindungen angeben. Gehen Sie voran und binden
Produkt.Bind();
/ / Freier Speicher für die Spalteninformationen, die wir in abgerufen / / vorheriger GetColumnInfo aufrufen
CoTaskMemFree(pColumnInfo);

Char * PszProductName;
Char * PszReorderLevel;
Bool bRC;

/ / Schleife durch die Datensätze Ablaufverfolgung Informationen.
während (Produkt.MoveNext() == S_OK)
{
   bRC = Produkt.GetValue (1, & DblProductID);
   PszProductName = (Char **) Produkt.GetValue(2);
   PszReorderLevel = (Char **) Produkt.GetValue(9);

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

Index