次の方法で共有


レコードセット : レコードのフィルタ処理 (ODBC)

更新 : 2007 年 11 月

このトピックの内容は、MFC ODBC クラスに該当します。

このトピックでは、レコードセットをフィルタ処理して、特定のレコードだけを抽出する方法について説明します。たとえば、MATH101 など、特定の課程に含まれる講義だけを抽出することもできます。フィルタは、SQL WHERE 句で定義する検索条件です。WHERE 句は、レコードセットの SQL ステートメントに付加されて、選択内容を限定します。

レコードセット オブジェクトのフィルタは、レコードセットの生成後、メンバ関数 Open を呼び出す前に (既に開かれているレコードセット オブジェクトを再利用する場合は、メンバ関数 Requery を呼び出す前に) 作成します。

レコードセット オブジェクトのフィルタを設定するには

  1. 新しいレコードセット オブジェクトを構築します。既存のオブジェクトを利用する場合は、Requery を呼び出せる状態にします。

  2. オブジェクトの m_strFilter データ メンバの値を設定します。

    フィルタは、null で終わる文字列で、SQL WHERE 句の内容は含まれていますが、WHERE キーワードは含まれていません。次のように設定します。

    m_pSet->m_strFilter = "CourseID = 'MATH101'";
    

    次の文字列は誤りです。

    m_pSet->m_strFilter = "WHERE CourseID = 'MATH101'";
    
    3ee7w2wx.alert_note(ja-jp,VS.90).gifメモ :

    上記の例では、リテラル文字列 "MATH101" は単一引用符で囲まれています。ODBC の仕様では、リテラル文字列を囲む記号として単一引用符を使います。リテラル文字列を囲む記号については、使用する DBMS の ODBC ドライバのドキュメントを参照してください。この構文については、このトピックの最後でも詳しく説明します。

  3. 必要に応じて、その他のオプション (並べ替え、ロック方法、パラメータなど) を設定します。パラメータは特に便利です。フィルタのパラメータ化については、「レコードセット : パラメータを利用したレコードセット (ODBC)」を参照してください。

  4. 新規オブジェクトでは Open を呼び出します。既存のオブジェクトの場合は Requery を呼び出します。

3ee7w2wx.alert_note(ja-jp,VS.90).gifヒント :

フィルタでパラメータを使用すると、レコードの検索効率が向上する場合があります。

3ee7w2wx.alert_note(ja-jp,VS.90).gifヒント :

レコードセット フィルタを使うと、テーブルを結合することも、実行時に入力または計算された値に基づいたパラメータを使用することもできます。

レコードセットは、指定された選択条件に合致するレコードだけを選び出します。たとえば、上の条件に合致する講義だけを指定するには (strCourseID の値として、"MATH101" が設定されている場合)、次のようにします。

// Using the recordset pointed to by m_pSet

// Set the filter
m_pSet->m_strFilter = "CourseID = " + strCourseID; 

// Run the query with the filter in place
if ( m_pSet->Open( CRecordset::snapshot, NULL, CRecordset::readOnly ) )

// Use the recordset

このレコードセットには、MATH101 の全講義目録が格納されます。

上の例のフィルタ文字列は、文字列変数を使って設定されています。これは一般的な使い方です。course ID にリテラル値 100 を指定するには、次のコードのように、フィルタ文字列を設定します。

m_strFilter = "StudentID = '100'";   // correct

単一引用符を必ず使います。次のようにすると、文字列は直接指定できません。

m_strFilter = "StudentID = 100";   // incorrect for some drivers

上記の引用符は ODBC 仕様に従っていますが、DBMS によっては他の引用符を使用する必要がある場合もあります。詳細については、「SQL : レコードセットの SQL ステートメントのカスタマイズ (ODBC)」を参照してください。

3ee7w2wx.alert_note(ja-jp,VS.90).gifメモ :

Open に独自の SQL 文字列を渡すと、レコードセットの既定の SQL 文字列がオーバーライドされます。この場合、カスタム文字列に WHERE 句が含まれているときは、フィルタを設定しないでください。既定の SQL をオーバーライドする方法の詳細については、「SQL : レコードセットの SQL ステートメントのカスタマイズ (ODBC)」を参照してください。

参照

概念

レコードセット (ODBC)

レコードセット : レコードの並べ替え (ODBC)

レコードセット : レコード選択のしくみ (ODBC)

レコードセット : レコード更新のしくみ (ODBC)

レコードセット : レコードのロック (ODBC)