CDaoRecordset::Open

必须调用该成员函数检索记录集中的记录。

virtual void Open(
   int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
   LPCTSTR lpszSQL = NULL,
   int nOptions = 0 
);
virtual void Open(
   CDaoTableDef* pTableDef,
   int nOpenType = dbOpenTable,
   int nOptions = 0 
);
virtual void Open(
   CDaoQueryDef* pQueryDef,
   int nOpenType = dbOpenDynaset,
   int nOptions = 0 
);

参数

  • nOpenType
    下列值之一:

    • 使用双向滚动的dbOpenDynaset 的动态类型的记录集。这是默认设置。

    • 使用双向滚动的dbOpenTable 的表类型的记录集。

    • 使用双向滚动的dbOpenSnapshot 的快照型记录集。

  • lpszSQL
    包含下列操作之一的字符串指针:

    • NULL 指针。

    • 一个或多tabledefs和querydefs的名称(以逗号分隔)。

    • SQL SELECT 语句(可选)与SQL WHEREORDERBY 子句)。

    • 传递查询。

  • nOptions
    下面列出的一个或多个选项卡。默认值为 0。可能值如下:

    • dbAppendOnly 可以仅追加新记录(仅动态类型的记录集)。此选项按原义表示记录只能追加。MFC ODBC数据库选件类具有允许记录检索和追加的一个追加选项。

    • dbForwardOnly 记录集是一个向前滚动快照。

    • dbSeeChanges 生成异常,如果另一个用户更改正在编辑的数据。

    • 其他 用户不能修改或添加记录的dbDenyWrite

    • dbDenyRead 其他用户无法查看记录(仅表类型的记录集)。

    • dbReadOnly 只能查看日志;其他用户可以修改它们。

    • dbInconsistent 不一致的更新(仅允许动态类型的记录集)。

    • dbConsistent 一致的更新(仅允许动态类型的记录集)。

    说明说明

    常数 dbConsistentdbInconsistent 互相排斥。在 Open特定实例可以使用具体,但是,不是两个。

  • pTableDef
    CDaoTableDef 对象的指针。此版本的表型记录集有效的。在使用此选项时,构造 CDaoRecordset 不使用的 CDaoDatabase 指针;相反,tabledef位于所使用的数据库。

  • pQueryDef
    CDaoQueryDef 对象的指针。此版本为动态类型和快照型记录集有效的。在使用此选项时,构造 CDaoRecordset 不使用的 CDaoDatabase 指针;相反,querydef位于所使用的数据库。

备注

在调用 Open之前,必须构造记录集对象。有若干方法可实现此操作:

  • 在构造记录集对象时,传递指向已打开的 CDaoDatabase 对象。

  • 当构造记录集对象时,请将指针没有打开的 CDaoDatabase 对象。当记录集对象关闭时,记录集打开 CDaoDatabase 对象,但是,不会将其关闭。

  • 在构造记录集对象时,传递 NULL 指针。记录集对象调用 GetDefaultDBName 获取Microsoft Access .MDB文件的名称打开。只要记录集是打开的,记录集然后打开 CDaoDatabase 对象并使其打开。当您调用在记录集中 CloseCDaoDatabase 对象也会关闭。

    说明说明

    当记录集打开 CDaoDatabase 对象时,将打开与非独占性访问的数据源。

对于使用 lpszSQL 参数 Open 的版本,在记录集打开时可以采用多种方法之一来检索记录。第一个选项是在您的 DoFieldExchange的DFX功能。第二个选项是使用动态绑定通过调用 GetFieldValue 成员函数。这些选项可以实现单独或在组合。如果它们合并,在SQL语句必须通过调用到 Open

当您使用在 CDaoTableDef 对象。Open 的第二个版本,发生的列将供您可以通过 DoFieldExchange 和DFX框架绑定,和/或通过 GetFieldValue动态绑定。

说明说明

使用表型记录集的,一 CDaoTableDef 对象只能调用 Open

当您使用在 CDaoQueryDef 对象。Open 的第三个版本,该查询,都将执行,得到的列将供您可以通过 DoFieldExchange 和DFX框架绑定,和/或通过 GetFieldValue动态绑定。

说明说明

使用动态类型和快照型记录集的,一 CDaoQueryDef 对象只能调用 Open

对于使用 lpszSQL 参数 Open 的第一个版本,记录根据下表中显示的标准选中。

lpszSQL 参数的值

确定选定的记录

示例

NULL

GetDefaultSQL返回的字符串。

 

逗号分隔的列表一个或多tabledefs和querydef名称。

DoFieldExchange表示的所有列。

"Customer"

SELECT 列列表 FROM 表列出

从指定的指定列

"SELECT CustId, CustName

FROM Customer"

通常程序是通过 NULLOpen;在这种情况下,Open 调用 GetDefaultSQL,类向导生成,当创建 CDaoRecordset派生类中的一个可重写的成员函数。此值赋予在 lpszSQL 参数中指定其他信息。

要通过,Open 构造查询的最后一个SQL字符串(该字符串可以包含SQL WHERE,并 ORDERBY 子句追加到 lpszSQL 字符串您传递的)然后执行查询。通过调用 GetSQL 检查该构造的字符串在调用 Open之后。

您的记录集选件类的字段数据成员绑定到选定数据的列。如果任何记录返回,第一条记录成为当前记录。

如果要将记录集的选项,如筛选器或排序,设置 m_strSortm_strFilter,在构造记录集对象后,但,在调用 Open之前。如果要刷新记录集中的记录,在记录集中已经打开后,请调用 Requery

如果您对动态类型或快照型记录集的 Open,或者,如果数据源是指一个SQL语句或表示一个附加表的一tabledef,则不能为该类型参数使用 dbOpenTable ;否则,MFC引发异常。若要确定tabledef对象是否表示一个附加的表,请创建一 CDaoTableDef 对象并调用其 GetConnect 成员函数。

请使用 dbSeeChanges 标志,如果您希望使其他用户或其他程序所做的更改在您的计算机上,当您在编辑或删除记录时。例如,因此,如果两个用户开始编辑记录,调用 Update 成员函数的第一个用户成功。当 Update 由第二个用户调用时,CDaoException 将引发。同样,因此,如果第二个用户尝试调用 Delete 删除记录和已更改了第一个用户,CDaoException 发生。

通常,因此,如果用户获取此 CDaoException,当更新时,您的代码应刷新字段的内容和检索最近修改的值。如果在删除过程中发生,代码会显示新记录数据以指示的用户和消息该数据最近更改。此时,您的代码可以请求确认该用户仍要删除该记录。

提示提示

使用向前滚动选项(dbForwardOnly)提高性能,则应用程序将打开的记录集使单向由ODBC数据源时。

有关相关信息,请参见主题“OpenRecordset方法” DAO帮助。

要求

Header: afxdao.h

请参见

参考

CDaoRecordset选件类

层次结构图

CDaoRecordset::Close

CDaoRecordset::CDaoRecordset