次の方法で共有


ウィザードを使用しないコンシューマーの作成

次の例は、既存の 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
    

プログラムでは、コンシューマーは通常、次の一連の操作を実行します。

  1. ローカル変数に列をバインドするユーザー レコード クラスを作成します。 この例では、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 のコード例で、CloseReleaseCommand を呼び出す方法を示しています。

  • CoUnInitialize を呼び出して COM を初期化前の状態に戻します。 これは、メインのコードで呼び出されます。

    CoUninitialize();
    

関連項目

OLE DB コンシューマーの作成