レコードセット: レコードのフィルター処理 (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、使用できるレコードの特定のサブセットのみを選ぶようにレコードセットをフィルター処理する方法について説明します。 たとえば、MATH101 のような特定のコースのクラス セクションのみを選ぶことができます。 フィルターは、SQL の WHERE 句の内容によって定義される検索条件です。 フレームワークを使ってそれをレコードセットの SQL ステートメントに付加する場合は、WHERE 句で選択を制限します。
オブジェクトを構築した後、その Open
メンバー関数を呼び出す前に (または Open
メンバー関数が以前に呼び出された既存のレコードセット オブジェクトの Requery
メンバー関数を呼び出す前に) レコードセット オブジェクトのフィルターを確立する必要があります。
レコードセット オブジェクトのフィルターを指定するには
新しいレコードセット オブジェクトを構築します (または、既存のオブジェクトに対して
Requery
を呼び出す準備をします)。オブジェクトの 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 ドライバーのドキュメントを参照してください。 この構文については、このトピックの最後の方で詳しく説明します。
並べ替え順序、ロック モード、パラメーターなど、必要な他のオプションを設定します。 パラメーターの指定は特に便利です。 フィルターのパラメーター化については、「レコードセット: パラメーターを利用したレコードセット (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 のすべてのクラス セクションのレコードが含まれています。
前述の例で、文字列変数を使ってどのようにフィルター文字列を設定したかに注目してください。 これが一般的な使用方法です。 そうではなく、コース 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)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示