レコードセット : レコードのフィルタ処理 (ODBC)
更新 : 2007 年 11 月
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、レコードセットをフィルタ処理して、特定のレコードだけを抽出する方法について説明します。たとえば、MATH101 など、特定の課程に含まれる講義だけを抽出することもできます。フィルタは、SQL WHERE 句で定義する検索条件です。WHERE 句は、レコードセットの SQL ステートメントに付加されて、選択内容を限定します。
レコードセット オブジェクトのフィルタは、レコードセットの生成後、メンバ関数 Open を呼び出す前に (既に開かれているレコードセット オブジェクトを再利用する場合は、メンバ関数 Requery を呼び出す前に) 作成します。
レコードセット オブジェクトのフィルタを設定するには
新しいレコードセット オブジェクトを構築します。既存のオブジェクトを利用する場合は、Requery を呼び出せる状態にします。
オブジェクトの m_strFilter データ メンバの値を設定します。
フィルタは、null で終わる文字列で、SQL WHERE 句の内容は含まれていますが、WHERE キーワードは含まれていません。次のように設定します。
m_pSet->m_strFilter = "CourseID = 'MATH101'";
次の文字列は誤りです。
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)」を参照してください。 |