记录集:筛选记录 (ODBC)

本主题适用于 MFC ODBC 类。

本主题介绍如何筛选记录集,使其仅选择可用记录的特定子集。 例如,你可能只想选择某一特定课程的课堂部分,例如 MATH101。 筛选器是由 SQL WHERE 子句的内容定义的搜索条件。 当框架将筛选器追加到记录集的 SQL 语句时,WHERE 子句会限制选择内容

必须在构造记录集对象之后,且在调用其 Open 成员函数之前(或在调用现有记录集对象 [之前已调用其 Open 成员函数] 的 Requery 成员函数之前)建立该对象的筛选器。

指定记录集对象的筛选器

  1. 构造新的记录集对象(或准备调用现有对象的 Requery)。

  2. 设置对象的 m_strFilter 数据成员的值。

    筛选器是一个以 null 结尾的字符串,其中包含 SQL WHERE 子句的内容,但不包含关键字 WHERE。 例如,使用:

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

    not

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

    注意

    在上述示例中,文本字符串“MATH101”是使用单引号括起来的。 在 ODBC SQL 规范中,单引号用于表示字符串字面量。 在这种情况下,请查看 ODBC 驱动程序文档,了解有关 DBMS 的引号要求。 本主题末尾部分还进一步讨论了此语法。

  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 的所有课堂部分的记录。

请注意在以上示例中使用字符串变量设置筛选器字符串的方式。 这是典型用法。 但假设你想要将文本值 100 指定为课程 ID。 以下代码演示如何使用文本值正确设置筛选器字符串:

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

请注意使用单引号字符;如果直接设置筛选器字符串,则筛选器字符串不正确

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

上面显示的引号符合 ODBC 规范,但某些 DBMS 可能需要其他引号字符。 有关详细信息,请参阅 SQL:自定义记录集的 SQL 语句 (ODBC)

注意

如果你选择通过将自己的 SQL 字符串传递到 Open 来覆盖记录集的默认 SQL 字符串,则在自定义字符串具有 WHERE 子句的情况下,不应设置筛选器。 有关覆盖默认 SQL 的详细信息,请参阅 SQL:自定义记录集的 SQL 语句 (ODBC)

另请参阅

记录集 (ODBC)
记录集:对记录进行排序 (ODBC)
记录集:记录集如何选择记录 (ODBC)
记录集:记录集如何更新记录 (ODBC)
记录集:锁定记录 (ODBC)