CDaoException 类
表示由基于数据访问对象 (DAO) 的 MFC 数据库类引起的异常条件。
注意
通过 Office 2013 支持数据访问对象(DAO)。 DAO 3.6 是最终版本,已过时。
语法
class CDaoException : public CException
成员
公共构造函数
名称 | 描述 |
---|---|
CDaoException::CDaoException | 构造 CDaoException 对象。 |
公共方法
名称 | 描述 |
---|---|
CDaoException::GetErrorCount | 返回数据库引擎的错误集合中的错误数。 |
CDaoException::GetErrorInfo | 返回有关错误集合中特定错误对象的错误信息。 |
公共数据成员
“属性” | 描述 |
---|---|
CDaoException::m_nAfxDaoError | 包含 MFC DAO 类中任何错误的扩展错误代码。 |
CDaoException::m_pErrorInfo | 指向 CDaoErrorInfo 对象的指针,该对象包含有关一个 DAO 错误对象的信息。 |
CDaoException::m_scode | 与错误相关的 SCODE 值。 |
注解
该类包含可用于确定异常原因的公共数据成员。 CDaoException
对象由 DAO 数据库类的成员函数构造和引出。
注意
DAO 数据库类不同于基于开放式数据库连接 (ODBC) 的 MFC 数据库类。 所有 DAO 数据库类名都具有“CDao”前缀。 你仍然可以使用 DAO 类访问 ODBC 数据源。 通常,基于 DAO 的 MFC 类比基于 ODBC 的 MFC 类更强大;基于 DAO 的类可以通过它们自己的数据库引擎访问数据,包括通过 ODBC 驱动程序。 基于 DAO 的类还支持数据定义语言 (DDL) 操作(例如通过类添加表),而无需直接调用 DAO。 有关 ODBC 类引发的异常的信息,请参阅 CDBException。
可以在 CATCH 表达式的范围内访问异常对象。 还可以使用 AfxThrowDaoException全局函数从自己的代码中引出 CDaoException
对象。
在 MFC 中,所有 DAO 错误都表示为类型为 CDaoException
的异常。 捕获此类型的异常时,可以使用 CDaoException
成员函数从数据库引擎的错误集合中存储的任何 DAO 错误对象中检索信息。 每发生一个错误,会将一个或多个错误对象放置在错误集合中。 (通常集合只包含一个错误对象;如果使用 ODBC 数据源,则更有可能获取多个错误对象。当另一个 DAO 操作生成错误时,将清除 Errors 集合,并将新的错误对象放置在 Errors 集合中。 不生成错误的 DAO 操作对错误集合没有影响。
有关 DAO 错误代码,请参阅文件 DAOERR.H。 要了解相关信息,请参阅 DAO 帮助中的主题“可捕获数据访问错误”。
有关常规异常处理或 CDaoException
对象的详细信息,请参阅文章异常处理 (MFC) 和异常:数据库异常。 第二篇文章包含演示 DAO 中的异常处理的示例代码。
继承层次结构
CDaoException
要求
标头:afxdao.h
CDaoException::CDaoException
构造 CDaoException
对象。
CDaoException();
备注
通常,当框架的代码引发异常时,框架会创建异常对象。 你很少需要显式构造异常对象。 如果要从自己的代码中引发 CDaoException
,请调用全局函数 AfxThrowDaoException。
但是,如果要通过 MFC 类封装的 DAO 接口指针直接调用 DAO,则可能需要显式创建异常对象。 在这种情况下,可能需要从 DAO 检索错误信息。 假设通过 DAODatabases 接口对工作区的数据库集合调用 DAO 方法时,DAO 中出现了一个错误。
检索 DAO 错误信息
构造一个
CDaoException
对象。调用异常对象的 GetErrorCount 成员函数来确定数据库引擎的错误集合中的错误对象数。 (通常只有一个,除非你使用的是 ODBC 数据源。
调用异常对象的 GetErrorInfo 成员函数,通过异常对象按集合中的索引一次检索一个特定的错误对象。 将异常对象视为一个 DAO 错误对象的代理。
检查
GetErrorInfo
在 m_pErrorInfo 数据成员中返回的当前 CDaoErrorInfo 结构。 其成员提供有关 DAO 错误的信息。对于 ODBC 数据源,根据需要重复步骤 3 和 4,以获取更多错误对象。
如果在堆上构造了异常对象,则在完成后使用
delete
运算符将其删除。
有关处理 MFC DAO 类中的错误的详细信息,请参阅异常:数据库异常一文。
CDaoException::GetErrorCount
调用此成员函数,以检索数据库引擎的错误集合中的 DAO 错误对象的数量。
short GetErrorCount();
返回值
数据库引擎的错误集合中的 DAO 错误对象数。
注解
此信息可用于循环访问 Errors 集合以检索集合中每个 DAO 错误对象。 若要按索引或 DAO 错误编号检索错误对象,请调用 GetErrorInfo 成员函数。
注意
通常,错误集合中只有一个错误对象。 但是,如果使用的是 ODBC 数据源,可能有多个。
CDaoException::GetErrorInfo
返回有关错误集合中特定错误对象的错误信息。
void GetErrorInfo(int nIndex);
参数
nIndex
数据库引擎的错误集合中错误信息的索引,用于按索引查找。
备注
调用此成员函数以获取有关异常的以下信息类型:
错误代码
源
说明
帮助文件
帮助上下文
GetErrorInfo
将信息存储在异常对象的 m_pErrorInfo
数据成员中。 有关返回的信息的简要说明,请参阅 m_pErrorInfo。 如果捕获 MFC 引发的 CDaoException
类型的异常,则 m_pErrorInfo
成员将已填充。 如果选择直接调用 DAO,你必须自行调用异常对象的 GetErrorInfo
成员函数来填充 m_pErrorInfo
。 有关更详细的说明,请参阅 CDaoErrorInfo 结构。
有关 DAO 异常的信息以及代码示例,请参阅异常:数据库异常一文。
CDaoException::m_nAfxDaoError
包含 MFC 扩展错误代码。
注解
当 MFC DAO 类的特定组件出错时会提供此代码。
可能的值为:
NO_AFX_DAO_ERROR最近的操作未导致 MFC 扩展错误。 但是,该操作可能已从 DAO 或 OLE 生成其他错误,因此应检查 m_pErrorInfo,可能还需要检查 m_scode。
AFX_DAO_ERROR_ENGINE_INITIALIZATION MFC 无法初始化 Microsoft Jet 数据库引擎。 OLE 可能未能初始化,或者可能无法创建 DAO 数据库引擎对象的实例。 这些问题通常表明 DAO 或 OLE 安装不正确。
AFX_DAO_ERROR_DFX_BIND DAO 记录字段交换(DFX)函数调用中使用的地址不存在或无效(地址未用于绑定数据)。 你可能在 DFX 调用中传递了错误的地址,或者 DFX 操作之间的地址可能已无效。
AFX_DAO_ERROR_OBJECT_NOT_OPEN您尝试基于 querydef 或未处于打开状态的 tabledef 对象打开记录集。
CDaoException::m_pErrorInfo
包含指向 CDaoErrorInfo
结构的指针,该结构提供有关上次通过调用 GetErrorInfo 检索到的 DAO 错误对象的信息。
注解
此对象包含下列信息:
CDaoErrorInfo 成员 | 信息 | 含义 |
---|---|---|
m_lErrorCode |
错误代码 | DAO 错误代码 |
m_strSource |
Source | 最初生成错误的对象或应用程序的名称 |
m_strDescription |
说明 | 与错误关联的描述性字符串 |
m_strHelpFile |
帮助文件 | Windows 帮助文件的路径,用户可以在其中获取有关问题的信息 |
m_lHelpContext |
帮助上下文 | DAO 帮助文件中主题的上下文 ID |
有关 CDaoErrorInfo
对象中包含的信息的完整详细信息,请参阅 CDaoErrorInfo 结构。
CDaoException::m_scode
包含描述错误的 SCODE
类型的值。
备注
这是一个 OLE 代码。 你很少需要使用此值,因为几乎所有情况下,其他 CDaoException
数据成员中都提供了更具体的 MFC 或 DAO 错误信息。
有关 SCODE 的信息,请参阅 Windows SDK 中的“OLE 错误代码的结构”主题。 SCODE 数据类型映射到 HRESULT 数据类型。