次の方法で共有


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

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

このトピックでは、使用できるレコードの特定のサブセットのみを選ぶようにレコードセットをフィルター処理する方法について説明します。 たとえば、MATH101 のような特定のコースのクラス セクションのみを選ぶことができます。 フィルターは、SQL の WHERE 句の内容によって定義される検索条件です。 フレームワークを使ってそれをレコードセットの SQL ステートメントに付加する場合は、WHERE 句で選択を制限します。

オブジェクトを構築した後、その Open メンバー関数を呼び出す前に (または Open メンバー関数が以前に呼び出された既存のレコードセット オブジェクトの Requery メンバー関数を呼び出す前に) レコードセット オブジェクトのフィルターを確立する必要があります。

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

  1. 新しいレコードセット オブジェクトを構築します (または、既存のオブジェクトに対して Requery を呼び出す準備をします)。

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

    フィルターは SQL の WHERE 句の内容を含み、キーワード WHERE は含まない、null で終わる文字列です。 たとえば、次のようなサービスを使います。

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

    not

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

    Note

    リテラル文字列 "MATH101" は上記のように単一引用符で示します。 ODBC SQL 仕様では、文字列リテラルを示すために単一引用符が使われます。 このような状況での DBMS の引用符の要件については、ODBC ドライバーのドキュメントを参照してください。 この構文については、このトピックの最後の方で詳しく説明します。

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

  4. 新しいオブジェクトの場合は Open (または、以前に開いたオブジェクトの場合は Requery) を呼び出します。

ヒント

レコードを取得する場合、フィルターにパラメーターを使うのが最も効率的な方法である可能性があります。

ヒント

レコードセット フィルターは、テーブルを結合する場合や、実行時に取得または計算した情報に基づいてパラメーターを使う場合に便利です。

指定した検索条件を満たすレコードのみをレコードセットに選びます。 たとえば、前述のコース フィルターを指定する (現在、変数 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 のすべてのクラス セクションのレコードが含まれています。

前述の例で、文字列変数を使ってどのようにフィルター文字列を設定したかに注目してください。 これが一般的な使用方法です。 そうではなく、コース ID にリテラル値 100 を指定したかったとします。 次のコードは、リテラル値を使ってフィルター文字列を正しく設定する方法を示しています。

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

単一引用符文字の使用に注意してください。フィルター文字列を直接設定する場合、フィルター文字列は次のようになりません

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

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

Note

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

関連項目

レコードセット (ODBC)
レコードセット: レコードの並べ替え (ODBC)
レコードセット: レコード選択のしくみ (ODBC)
レコードセット: レコード更新のしくみ (ODBC)
レコードセット: レコードのロック (ODBC)