记录集:筛选记录 (ODBC)
本主题适用于 MFC ODBC 类。
本主题介绍如何筛选记录集,使其仅选择可用记录的特定子集。 例如,你可能只想选择某一特定课程的课堂部分,例如 MATH101。 筛选器是由 SQL WHERE 子句的内容定义的搜索条件。 当框架将筛选器追加到记录集的 SQL 语句时,WHERE 子句会限制选择内容。
必须在构造记录集对象之后,且在调用其 Open
成员函数之前(或在调用现有记录集对象 [之前已调用其 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 SQL 规范中,单引号用于表示字符串字面量。 在这种情况下,请查看 ODBC 驱动程序文档,了解有关 DBMS 的引号要求。 本主题末尾部分还进一步讨论了此语法。
设置所需的任何其他选项,例如排序顺序、锁定模式或参数。 指定参数特别有用。 有关参数化筛选器的信息,请参阅记录集:参数化记录集 (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 的所有课堂部分的记录。
请注意在以上示例中使用字符串变量设置筛选器字符串的方式。 这是典型用法。 但假设你想要将文本值 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)