CDynamicAccessorを使用すると、コマンドのOpenメソッド アクセサーを自動的に、開かれた行セットの列情報に基づいて作成します。列がどのようにバインドしているコントロールには動的アクセサーをオーバーライドすることができます。
動的アクセサーをオーバーライドするには、 falseを最後のパラメーターとして、 ccommand::openメソッドに渡します。これは、オープンでアクセサーが自動的に作成されません。GetColumnInfoを呼び出してAddBindEntryバインドする各列に対して呼び出すことができます。次のコードを行う方法を示しています
USES_CONVERSION;二重 dblProductID;CCommandlt;CDynamicAccessor > 製品;//自動バインディング製品を防ぐ false を渡す、テーブルを開きます。オープン (セッション、_T ("選択 ※ 製品から」)、NULL NULL、DBGUID_DEFAULT、false);ULONG nColumns;設定した DBCOLUMNINFO ※ pColumnInfo;//、開かれた行セットから列情報を取得します。製品。GetColumnInfo & nColumns、(pColumnInfo);//ダブルとしてプロダクト ID をバインドpColumnInfo [0] .wtype DBTYPE_R8; =pColumnInfo [0] .ulcolumnsize = 8;製品。AddBindEntry(pColumnInfo[0]);//は、製品名をバインド製品。AddBindEntry(pColumnInfo[1]);//文字列として並べ替えレベルをバインドpColumnInfo [8] .wtype DBTYPE_STR; =pColumnInfo [8] .ulcolumnsize = 10;製品。AddBindEntry(pColumnInfo[8]);//は、バインディングの指定が完了します。先に行くし、バインド製品。Bind();//私たちの取得、列については、メモリを解放・ ・前に GetColumnInfo を呼び出してCoTaskMemFree(pColumnInfo);char ※ pszProductName;char ※ pszReorderLevel;bool bRC;//ループ レコードをトレース情報を。(製品中。MoveNext() S_OK = =){bRC 製品を =。GetValue 1、(dblProductID);pszProductName = (char ※) 製品。GetValue(2);pszReorderLevel = (char ※) 製品。GetValue(9);ATLTRACE (_T ("オーバーライド % lf \"%s\ =「\"%s\"\n」)、dblProductID、A2T(pszProductName)、A2T(pszReorderLevel));}