レコードセット: レコードのフィルター処理 (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、レコードセットをフィルター処理して、特定のレコードだけを抽出する方法について説明します。 たとえば、MATH101 など、特定の課程に含まれる講義だけを抽出することもできます。 フィルターは、SQL WHERE 句で定義する検索条件です。 WHERE 句は、レコードセットの SQL ステートメントに付加されて、選択内容を限定します。
レコードセット オブジェクトのフィルターは、レコードセットの生成後、メンバー関数 Open を呼び出す前に (既に開かれているレコードセット オブジェクトを再利用する場合は、メンバー関数 Requery を呼び出す前に) 作成します。
レコードセット オブジェクトのフィルターを設定するには
新しいレコードセット オブジェクトを構築します。既存のオブジェクトを利用する場合は、Requery を呼び出せる状態にします。
オブジェクトの m_strFilter データ メンバーの値を設定します。
フィルターは、null で終わる文字列で、SQL WHERE 句の内容は含まれていますが、WHERE キーワードは含まれていません。 次のように設定します。
m_pSet->m_strFilter = "CourseID = 'MATH101'";
not
m_pSet->m_strFilter = "WHERE CourseID = 'MATH101'";
注意
上記の例では、リテラル文字列 "MATH101" は単一引用符で囲まれています。 ODBC の仕様では、リテラル文字列を囲む記号として単一引用符を使います。 リテラル文字列を囲む記号については、使用する DBMS の ODBC ドライバーのドキュメントを参照してください。 この構文については、このトピックの最後でも詳しく説明します。
必要に応じて、その他のオプション (並べ替え、ロック方法、パラメーターなど) を設定します。 パラメーターは特に便利です。 フィルターのパラメーター化については、「レコードセット : パラメーターを利用したレコードセット (ODBC)」を参照してください。
新規オブジェクトでは 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 の全講義目録が格納されます。
上の例のフィルター文字列は、文字列変数を使って設定されています。 これは一般的な使い方です。 course ID にリテラル値 100 を指定するには、 次のコードのように、フィルター文字列を設定します。
m_strFilter = "StudentID = '100'"; // correct
単一引用符を必ず使います。次のようにすると、文字列は直接指定できません。
m_strFilter = "StudentID = 100"; // incorrect for some drivers
上記の引用符は ODBC 仕様に従っていますが、DBMS によっては他の引用符を使用する必要がある場合もあります。 詳細については、「SQL : レコードセットの SQL ステートメントのカスタマイズ (ODBC)」を参照してください。
注意
Open に独自の SQL 文字列を渡すと、レコードセットの既定の SQL 文字列がオーバーライドされます。この場合、カスタム文字列に WHERE 句が含まれているときは、フィルターを設定しないでください。 既定の SQL をオーバーライドする方法の詳細については、「SQL : レコードセットの SQL ステートメントのカスタマイズ (ODBC)」を参照してください。