CDaoException (Clase)

Representa una condición de excepción que surge de las clases de base de datos MFC basadas en los objetos (DAO) de acceso a datos. DAO 3.6 es la versión final y se considera obsoleta.

Sintaxis

class CDaoException : public CException

Miembros

Constructores públicos

Nombre Descripción
CDaoException::CDaoException Construye un objeto CDaoException.

Métodos públicos

Nombre Descripción
CDaoException::GetErrorCount Devuelve el número de errores de la colección Errors del motor de base de datos.
CDaoException::GetErrorInfo Devuelve la información de error relativa a un objeto de error determinado de la colección Errors.

Miembros de datos públicos

Nombre Descripción
CDaoException::m_nAfxDaoError Contiene un código de error extendido para cualquier error en las clases DAO de MFC.
CDaoException::m_pErrorInfo Puntero a un objeto CDaoErrorInfo que contiene información sobre un objeto de error de DAO.
CDaoException::m_scode Valor SCODE asociado al error.

Comentarios

La clase incluye miembros de datos públicos que se pueden usar para determinar la causa de la excepción. Los objetos CDaoException se crean e inician mediante funciones miembro de las clases de base de datos DAO.

Nota:

Las clases de base de datos DAO son distintas de las clases de base de datos MFC, basadas en la conectividad abierta de base de datos (ODBC). Todos los nombres de las clases de base de datos DAO tienen el prefijo "CDao". Se puede seguir accediendo a orígenes de datos de ODBC usando clases DAO. En general, las clases MFC basadas en DAO son más capaces que las clases MFC basadas en ODBC; las clases basadas en DAO pueden acceder a los datos, incluso mediante controladores ODBC, a través de su propio motor de base de datos. Las clases basadas en DAO también admiten operaciones de lenguaje de definición de datos (DDL), como agregar tablas a través de las clases, sin tener que llamar directamente a DAO. Para obtener información sobre las excepciones producidas por las clases ODBC, vea CDBException.

Se puede acceder a objetos de excepción dentro del ámbito de una expresión CATCH. También se pueden iniciar objetos CDaoException desde su propio código con la función global AfxThrowDaoException.

En MFC, todos los errores de DAO se expresan como excepciones de tipo CDaoException. Cuando se detecta una excepción de este tipo, se pueden usar funciones miembro CDaoException para recuperar información de cualquier objeto de error DAO almacenado en la colección Errors del motor de base de datos. Cada vez que se produce un error, se colocan uno o varios objetos de error en la colección Errors. (Normalmente, la colección contiene solo un objeto de error; si usa un origen de datos ODBC, es más probable que obtenga varios objetos de error). Cuando otra operación DAO genera un error, se borra la colección Errors y el nuevo objeto de error se coloca en la colección Errors. Las operaciones DAO que no generan un error no tienen ningún efecto en la colección Errors.

Para ver los códigos de error de DAO, consulte el archivo DAOERR.H. Para obtener información relacionada, vea el tema sobre errores de acceso a datos interceptables de la Ayuda de DAO.

Para más información sobre el control de excepciones en general o sobre los objetos CDaoException, vea los artículos Control de excepciones (MFC) y Excepciones: Excepciones de base de datos. El segundo artículo contiene código de ejemplo que ilustra el control de excepciones en DAO.

Jerarquía de herencia

CObject

CException

CDaoException

Requisitos

Encabezado: afxdao.h

CDaoException::CDaoException

Construye un objeto CDaoException.

CDaoException();

Comentarios

Normalmente, el marco crea objetos de excepción cuando el código produce una excepción. Rara vez es necesario construir explícitamente un objeto de excepción. Si quiere iniciar una excepción CDaoException desde su propio código, llame a la función global AfxThrowDaoException.

Con todo, lo mejor es crear explícitamente un objeto de excepción si realiza llamadas directas a DAO a través de los punteros de interfaz DAO que encapsulan clases MFC. En ese caso, puede que tenga que recuperar información de error de DAO. Supongamos que se produce un error en DAO cuando se llama a un método DAO a través de la interfaz DAODatabases a la colección Databases de un área de trabajo.

Para recuperar información de errores de DAO
  1. Cree un objeto CDaoException.

  2. Llame a la función miembro GetErrorCount del objeto de excepción para determinar cuántos objetos de error hay en la colección Errors del motor de base de datos. (Normalmente, solo una, a menos que use un origen de datos ODBC).

  3. Llame a la función miembro GetErrorInfo del objeto de excepción para recuperar un objeto de error específico cada vez, por índice en la colección, a través del objeto de excepción. El objeto de excepción se puede considerar como un proxy de un objeto de error DAO.

  4. Examine la estructura actual del objeto CDaoErrorInfo que GetErrorInfo devuelve en el miembro de datos m_pErrorInfo. Sus miembros proporcionan información sobre el error de DAO.

  5. En el caso de un origen de datos ODBC, repita los pasos 3 y 4 según sea necesario para obtener más objetos de error.

  6. Si ha creado el objeto de excepción en el montón, elimínelo con el operador delete cuando termine.

Para obtener más información sobre el control de errores en las clases DAO de MFC, vea el artículo Excepciones: Excepciones de base de datos.

CDaoException::GetErrorCount

Llame a esta función miembro para recuperar el número de objetos de error de DAO de la colección Errors del motor de base de datos.

short GetErrorCount();

Valor devuelto

Número de objetos de error de DAO de la colección Errors del motor de base de datos.

Comentarios

Esta información es útil para recorrer en bucle la colección Errors para recuperar cada uno de los objetos de error de DAO de la colección. Para recuperar un objeto de error por índice o por número de error de DAO, llame a la función miembro GetErrorInfo.

Nota:

Normalmente, solo hay un objeto de error en la colección Errors, pero si está trabajando con un origen de datos ODBC, podría haber más de uno.

CDaoException::GetErrorInfo

Devuelve la información de error relativa a un objeto de error determinado de la colección Errors.

void GetErrorInfo(int nIndex);

Parámetros

nIndex
Índice de la información de error de la colección Errors del motor de base de datos, para buscar por índice.

Comentarios

Llame a esta función miembro para obtener los siguientes tipos de información sobre la excepción:

  • Código de error

  • Origen

  • Descripción

  • Archivo de ayuda

  • Contexto de ayuda

GetErrorInfo almacena la información en el miembro de datos m_pErrorInfo del objeto de excepción. Para obtener una breve descripción de la información devuelta, vea m_pErrorInfo. Si se detecta una excepción de tipo CDaoException producida por MFC, el miembro m_pErrorInfo ya estará rellenado. Si decide llamar directamente a DAO, el usuario deberá llamar a la función miembro GetErrorInfo del objeto de excepción para que m_pErrorInfo se rellene. Para obtener una descripción más detallada, vea la estructura CDaoErrorInfo.

Para obtener información sobre las excepciones de DAO, así como código de ejemplo, vea el artículo Excepciones: Excepciones de base de datos.

CDaoException::m_nAfxDaoError

Contiene un código de error extendido de MFC.

Comentarios

Este código se proporciona en los casos en los que un componente específico de las clases DAO de MFC da error.

Los valores posibles son:

  • NO_AFX_DAO_ERROR: la operación más reciente no produjo un error extendido de MFC. Sin embargo, la operación podría haber producido otros errores de DAO u OLE, por lo que convendría consultar m_pErrorInfo y, seguramente, m_scode.

  • AFX_DAO_ERROR_ENGINE_INITIALIZATION MFC: el motor de base de datos de Microsoft Jet no pudo inicializarse. Puede que OLE no se haya inicializado o que haya sido imposible crear una instancia del objeto del motor de base de datos de DAO. Estos problemas suelen translucir una instalación incorrecta de DAO u OLE.

  • AFX_DAO_ERROR_DFX_BIND: una dirección usada en una llamada de función de intercambio de campos de registros de DAO (DFX) no existe o no es válida (la dirección no se usó para enlazar datos). Puede que se haya pasado una dirección incorrecta en una llamada DFX o que la dirección haya quedado invalidada entre operaciones DFX.

  • AFX_DAO_ERROR_OBJECT_NOT_OPEN: se ha intentando abrir un conjunto de registros basado en un objeto QueryDef o TableDef que no estaba en un estado abierto.

CDaoException::m_pErrorInfo

Contiene un puntero a una estructura CDaoErrorInfo que proporciona información sobre el objeto de error DAO que se recuperó por última vez llamando a GetErrorInfo.

Comentarios

Este objeto contiene la siguiente información:

Miembro de CDaoErrorInfo Información Significado
m_lErrorCode Código de error Código de error de DAO
m_strSource Origen Nombre del objeto o la aplicación origen del error
m_strDescription Descripción Cadena descriptiva asociada al error
m_strHelpFile Archivo de ayuda Ruta de acceso a un archivo de Ayuda de Windows donde el usuario puede obtener información sobre el problema
m_lHelpContext Contexto de ayuda Identificador de contexto de un tema en el archivo de Ayuda de DAO

Para obtener toda la información incluida en el objeto CDaoErrorInfo, vea la estructura CDaoErrorInfo.

CDaoException::m_scode

Contiene un valor de tipo SCODE que describe el error.

Comentarios

Se trata de un código OLE. Rara vez tendrá que usar este valor porque, en casi todos los casos, habrá información de error de MFC o DAO más específica en los otros miembros de datos CDaoException.

Para obtener información sobre SCODE, vea el tema Estructura de códigos de error de OLE en Windows SDK. El tipo de datos SCODE se correlaciona con el tipo de datos HRESULT.

Consulte también

CException (clase)
Gráfico de jerarquías
CException (clase)