ウィザードを使用しないコンシューマーの作成
次の例は、既存の ATL プロジェクトに OLE DB コンシューマーのサポートを追加していることを前提としています。 MFC アプリケーションに OLE DB コンシューマーのサポートを追加する場合は、MFC アプリケーション ウィザードを実行する必要があります。このウィザードが必要なすべてのサポートを作成し、アプリケーションを実行するために必要な MFC ルーチンを呼び出します。
ATL OLE DB コンシューマー ウィザードを使用せずに OLE DB コンシューマーのサポートを追加するには:
pch.h ファイルで、次の
#include
ステートメントを追加します。#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
プログラムでは、コンシューマーは通常、次の一連の操作を実行します。
ローカル変数に列をバインドするユーザー レコード クラスを作成します。 この例では、
CMyTableNameAccessor
がユーザー レコード クラスです (「ユーザー レコード」を参照)。 このクラスには、列マップとパラメーター マップが含まれています。 列マップで指定するフィールドごとにユーザー レコード クラスのデータ メンバーを宣言します。また、これらのデータ メンバーのそれぞれについて、ステータスのデータ メンバーと長さのデータ メンバーを宣言します。 詳細については、「ウィザードで生成されたアクセサーのフィールド ステータスのデータ メンバー」を参照してください。Note
独自のコンシューマーを作成する場合、データ変数は、ステータス変数と長さ変数よりも前に記述する必要があります。
データ ソースとセッションをインスタンス化します。 使用するアクセサーと行セットの型を決めたら、CCommand または CTable を使用して行セットをインスタンス化します。
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor>>
CoInitialize
を呼び出して COM を初期化します。 これは、メインのコードで呼び出されます。 次に例を示します。HRESULT hr = CoInitialize(NULL);
CDataSource::Open またはそのバリエーションの 1 つを呼び出します。
データ ソースへの接続を開き、セッションを開き、行セットを開いて初期化します (さらに、コマンドの場合はそれを実行します)。
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();