ウィザードを使用しないコンシューマーの作成
次の例は、OLE DB コンシューマー サポートを既存の ATL プロジェクトに追加することを前提にしています。 OLE DB コンシューマー サポートを MFC アプリケーションに追加する場合は、MFC アプリケーション ウィザードを実行する必要があります。MFC アプリケーション ウィザードは、必要なすべてのサポートを作成し、アプリケーションの実行に必要な MFC ルーチンを呼び出します。
ATL OLE DB コンシューマー ウィザードを使用せずに OLE DB コンシューマー サポートを追加するには、以下の手順に従います。
Stdafx.h ファイルに次の #include ステートメントを追加します。
#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
プログラムでは、通常、コンシューマーが以下の操作を実行します。
列をローカル変数に連結するユーザー レコード クラスを作成します。 この例では、CMyTableNameAccessor がユーザー レコード クラスです (「ユーザー レコード」を参照)。 このクラスには、列マップとパラメーター マップが含まれます。 列マップに指定する各フィールドについて、ユーザー レコード クラスでデータ メンバーを宣言します。また、これらの各データ メンバーについて、ステータスのデータ メンバーと長さのデータ メンバーも宣言します。 詳細については、「ウィザードで生成されたアクセサーのフィールド ステータスのデータ メンバー」を参照してください。
注意
独自のコンシューマーを作成する場合は、データ変数をステータスの変数や長さの変数より前に記述する必要があります。
データ ソースとセッションをインスタンス化します。 使用するアクセサーと行セットの種類を決定し、CCommand または CTable を使用して行セットをインスタンス化します。
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor> >
CoInitialize を呼び出して COM を初期化します。 通常は、メイン コードで呼び出されます。 たとえば、次のように指定します。
HRESULT hr = CoInitialize(NULL);
CDataSource::Open またはそのバリエーションを呼び出します。
データ ソースに接続し、セッションを開き、行セットを開いて初期化します。コマンドがある場合は実行します。
hr = ds.Open(); hr = ss.Open(ds); hr = rs.Open(); // (Open also executes the command)
必要に応じて、CDBPropSet::AddProperty を使用して行セット プロパティを設定し、パラメーターとして rs.Open に渡します。 この手順の例については、「コンシューマー ウィザードで生成されたメソッド」の「GetRowsetProperties」を参照してください。
これで、行セットを使用してデータの取得や操作を行うことができます。
アプリケーションが終了したら、接続、セッション、および行セットを閉じます。
rs.Close(); ss.Close(); ds.Close();
コマンドを使用している場合は、Close の後に ReleaseCommand を呼び出すこともできます。 「CCommand::Close」のコード例では、Close と ReleaseCommand の呼び出し方法が示されています。
CoUnInitialize を呼び出して COM の初期化を解除します。 通常は、メイン コードで呼び出されます。
CoUninitialize();