记录集:创建和关闭记录集 (ODBC)

本主题适用于 MFC ODBC 类。

若要使用记录集,请构造记录集对象,然后调用该对象的 Open 成员函数来运行记录集的查询和选择记录。 完成记录集操作后,关闭并销毁记录集对象。

本主题阐释:

  • 何时以及如何创建记录集对象。

  • 何时以及如何通过参数化、筛选、排序或锁定来限定记录集的行为。

  • 何时以及如何关闭记录集对象。

在运行时创建记录集

在程序中创建记录集对象之前,通常编写应用程序特定的记录集类。 有关此预备步骤的更多信息,请参见添加 MFC ODBC 使用者

当需要从数据源选择记录时,打开动态集或快照对象。 要创建的对象类型取决于您要在应用程序中对数据进行的操作以及 ODBC 驱动程序支持的类型。 有关更多信息,请参见动态集快照

打开记录集

  1. 构造 CRecordset 派生的类的对象。

    可以在堆或函数的堆栈帧上构造对象。

  2. 可以选择修改默认记录集行为。 有关可用选项,请参见设置记录集选项。

  3. 调用对象的 Open 成员函数。

在该构造函数中,向 CDatabase 对象传递一个指针,或者传递 NULL 以使用框架将在 GetDefaultConnect 成员函数返回的连接字符串的基础上构造并打开的临时数据库对象。 CDatabase 对象可能已连接到数据源。

Open 的调用使用 SQL 从数据源中选择记录。 选择的第一条记录(如果存在)为当前记录。 该记录的字段值存储在记录集对象的字段数据成员中。 如果选定了任何记录,则 IsBOFIsEOF 成员函数都返回 0。

Open 调用中,可以:

  • 指定记录集是动态集还是快照。 默认情况下,记录集作为快照打开。 或者可以指定仅向前记录集,该记录集只允许向前逐个滚动记录。

    默认情况下,记录集使用存储在 CRecordset 数据成员 m_nDefaultType 中的默认类型。 向导写代码将 m_nDefaultType 初始化为您在向导中选择的记录集类型。 如果不接受该默认设置,可以用另一种记录集类型替换。

  • 指定一个字符串来替换记录集构造的默认 SQL SELECT 语句。

  • 指定记录集是只读的还是仅追加的。 默认情况下,记录集允许完整更新;但可以限制该默认设置而只添加新记录,或者可以不允许所有的更新。

下面的示例显示如何打开 CStudentSet 类(一个应用程序特定的类)的只读快照对象:

// Construct the snapshot object
CStudentSet rsStudent( NULL );
// Set options if desired, then open the recordset
if(!rsStudent.Open(CRecordset::snapshot, NULL, CRecordset::readOnly))
    return FALSE;
// Use the snapshot to operate on its records...

调用 Open 后,使用该对象的成员函数和数据成员来处理记录。 某些情况下,可能需要再次查询或刷新记录集以包括数据源上已发生的更改。 有关更多信息,请参见记录集:再次查询记录集 (ODBC)

提示

开发期间使用的连接字符串可能和最终用户所需的连接字符串不同。 有关在这方面使您的应用程序通用的建议,请参见数据源:管理连接 (ODBC)

设置记录集选项

在构造记录集对象之后但尚未调用 Open 来选择记录之前,可能需要设置某些选项来控制记录集的行为。 对于所有记录集,可以:

  • 指定 filter 来限制记录的选定内容。

  • 指定记录的 Sort 顺序。

  • 指定 Parameters,以便可以使用运行时获得或计算出的信息来选择记录。

如果条件合适,还可以设置下面的选项:

  • 如果记录集是可更新的并支持锁定选项,则指定用于更新的锁定方法。

提示

若要影响记录的选择,必须在调用 Open 成员函数之前设置这些选项。

关闭记录集

完成记录集操作后,必须释放记录集并解除分配其内存。

关闭记录集

  1. 调用其 Close 成员函数。

  2. 销毁记录集对象。

    如果已经在函数的堆栈帧上声明该对象,则当该对象超出范围时自动被销毁。 否则,使用 delete 运算符。

Close 释放记录集的 HSTMT 句柄, 但不销毁 C++ 对象。

请参见

概念

记录集 (ODBC)

记录集:滚动 (ODBC)

记录集:添加、更新和删除记录 (ODBC)