Classe CDaoException

Representa uma condição de exceção decorrente das classes de banco de dados MFC com base em DAO (objetos de acesso a dados).

Observação

O DAO (Objeto de Acesso a Dados) é suportado pelo Office 2013. DAO 3.6 é a versão final e está obsoleta.

Sintaxe

class CDaoException : public CException

Membros

Construtores públicos

Nome Descrição
CDaoException::CDaoException Constrói um objeto CDaoException.

Métodos públicos

Nome Descrição
CDaoException::GetErrorCount Retorna o número de erros na coleção Erros do mecanismo de banco de dados.
CDaoException::GetErrorInfo Retorna informações de erro sobre um objeto de erro específico na coleção Erros.

Membros de Dados Públicos

Nome Descrição
CDaoException::m_nAfxDaoError Contém um código de erro estendido para qualquer erro nas classes DAO do MFC.
CDaoException::m_pErrorInfo Um ponteiro para um objeto CDaoErrorInfo que contém informações sobre um objeto de erro DAO.
CDaoException::m_scode O valor SCODE associado ao erro.

Comentários

A classe inclui membros de dados públicos que você pode usar para determinar a causa da exceção. Os objetos CDaoException são construídos e gerados por funções de membro das classes de banco de dados DAO.

Observação

As classes de banco de dados do DAO são diferentes das classes de banco de dados MFC com base no ODBC (Open Database Connectivity). Todos os nomes de classe de banco de dados do DAO têm o prefixo "CDao". Você ainda pode acessar fontes de dados ODBC com as classes DAO. Em geral, as classes do MFC baseadas em DAO são mais capazes do que as classes do MFC com base em ODBC. As classes baseadas em DAO podem acessar dados, inclusive por meio de drivers do ODBC, por meio de um mecanismo próprio de banco de dados. As classes baseadas em DAO também dão suporte a operações de DDL (Linguagem de Definição de Dados), como adicionar tabelas por meio das classes, sem precisar chamar o DAO diretamente. Para obter informações sobre exceções geradas pelas classes do ODBC, confira CDBException.

Você pode acessar objetos de exceção no escopo de uma expressão CATCH. Você também pode lançar objetos CDaoException de seu próprio código com a função global AfxThrowDaoException.

No MFC, todos os erros de DAO são expressos como exceções, do tipo CDaoException. Quando você captura uma exceção desse tipo, pode usar funções de membro CDaoException para recuperar informações de objetos de erro DAO armazenados na coleção Erros do mecanismo de banco de dados. À medida que cada erro ocorre, um ou mais objetos de erro são colocados na coleção Erros. (Normalmente, a coleção contém apenas um objeto de erro; se você estiver usando uma fonte de dados ODBC, é mais provável que obtenha vários objetos de erro.) Quando outra operação DAO gera um erro, a coleção Errors é limpa e o novo objeto de erro é colocado na coleção Errors. As operações DAO que não geram um erro não têm nenhum efeito na coleção Erros.

Para códigos de erro DAO, confira o arquivo DAOERR.H. Para obter informações relacionadas, confira o tópico "Erros de acesso a dados interceptáveis" na ajuda do DAO.

Para obter mais informações sobre o tratamento de exceções em geral ou sobre objetos CDaoException, confira os artigos Tratamento de exceções (MFC) e Exceções: exceções de banco de dados. O segundo artigo contém um código de exemplo que ilustra o tratamento de exceções no DAO.

Hierarquia de herança

CObject

CException

CDaoException

Requisitos

Cabeçalho: afxdao.h

CDaoException::CDaoException

Constrói um objeto CDaoException.

CDaoException();

Comentários

Normalmente, a estrutura cria objetos de exceção quando seu código gera uma exceção. Você raramente precisa construir um objeto de exceção explicitamente. Se você quiser lançar um CDaoException de seu próprio código, chame a função global AfxThrowDaoException.

No entanto, talvez você queira criar explicitamente um objeto de exceção se estiver fazendo chamadas diretas para o DAO por meio dos ponteiros de interface do DAO que as classes MFC encapsulam. Nesse caso, talvez seja necessário recuperar informações de erro do DAO. Suponha que um erro ocorra no DAO quando você chama um método DAO por meio da interface DAODatabases para a coleção Bancos de dados de um workspace.

Para recuperar as informações de erro do DAO
  1. Construir um objeto CDaoException.

  2. Chame a função de membro GetErrorCount do objeto de exceção para determinar quantos objetos de erro estão na coleção Erros do mecanismo de banco de dados. (Normalmente, apenas um, a menos que você esteja usando uma fonte de dados ODBC.)

  3. Chame a função de membro GetErrorInfo do objeto de exceção para recuperar um objeto de erro específico por vez, por índice na coleção, por meio do objeto de exceção. Pense no objeto de exceção como um proxy para um objeto de erro do DAO.

  4. Examine a estrutura CDaoErrorInfo atual que GetErrorInfo retorna no membro de dados m_pErrorInfo. Seus membros fornecem informações sobre o erro do DAO.

  5. No caso de uma fonte de dados ODBC, repita as etapas 3 e 4, conforme necessário, para obter mais objetos de erro.

  6. Se você tiver construído o objeto de exceção no heap, exclua-o com o operador delete quando terminar.

Para mais informações sobre como lidar com erros de tratamento nas classes DAO do MFC, confira o artigo Exceções: exceções de banco de dados.

CDaoException::GetErrorCount

Chame essa função de membro para recuperar o número de objetos de erro do DAO na coleção Erros do mecanismo de banco de dados.

short GetErrorCount();

Valor de retorno

O número de objetos de erro do DAO na coleção Erros do mecanismo de banco de dados.

Comentários

Essas informações são úteis para percorrer a coleção Errors para recuperar cada um de um ou mais objetos de erro DAO na coleção. Para recuperar um objeto de erro por índice ou por número de erro do DAO, chame a função de membro GetErrorInfo.

Observação

Normalmente, há apenas um objeto de erro na coleção Erros. No entanto, se você estiver trabalhando com uma fonte de dados ODBC, poderá haver mais de uma.

CDaoException::GetErrorInfo

Retorna informações de erro sobre um objeto de erro específico na coleção Erros.

void GetErrorInfo(int nIndex);

Parâmetros

nIndex
O índice das informações de erro na coleção Erros do mecanismo de banco de dados para pesquisa por índice.

Comentários

Chame essa função de membro para obter os seguintes tipos de informações sobre a exceção:

  • Código do erro

  • Fonte

  • Descrição

  • Arquivo de ajuda

  • Contexto de ajuda

GetErrorInfo armazena as informações no membro de dados m_pErrorInfo do objeto de exceção. Para obter uma breve descrição das informações retornadas, confira m_pErrorInfo. Se você capturar uma exceção de tipo CDaoException gerada pelo MFC, o membro m_pErrorInfo já estará preenchido. Se você optar por chamar o DAO diretamente, deverá chamar a função de membro GetErrorInfo do objeto de exceção para preencher m_pErrorInfo. Para obter uma descrição mais detalhada, confira a estrutura CDaoErrorInfo.

Para obter informações sobre exceções de DAO e código de exemplo, confira o artigo Exceções: exceções de banco de dados.

CDaoException::m_nAfxDaoError

Contém um código de erro estendido do MFC.

Comentários

Esse código é fornecido nos casos em que um componente específico das classes DAO do MFC errou.

Os valores possíveis são:

  • NO_AFX_DAO_ERROR A operação mais recente não resultou em um erro estendido do MFC. No entanto, a operação pode ter produzido outros erros de DAO ou OLE, portanto, você deve verificar m_pErrorInfo e, possivelmente, m_scode.

  • AFX_DAO_ERROR_ENGINE_INITIALIZATION MFC não pôde inicializar o mecanismo de banco de dados do Microsoft Jet. O OLE pode ter falhado ao inicializar ou pode ter sido impossível criar uma instância do objeto do mecanismo de banco de dados do DAO. Esses problemas geralmente sugerem uma instalação incorreta de DAO ou OLE.

  • AFX_DAO_ERROR_DFX_BIND Um endereço usado em uma chamada de função DFX (troca de campo de registro) DAO não existe ou é inválido (o endereço não foi usado para associar dados). Você pode ter passado um endereço incorreto em uma chamada DFX ou o endereço pode ter se tornado inválido entre operações DFX.

  • AFX_DAO_ERROR_OBJECT_NOT_OPEN Você tentou abrir um conjunto de registros com base em um objeto querydef ou tabledef que não estava em um estado aberto.

CDaoException::m_pErrorInfo

Contém um ponteiro para uma estrutura CDaoErrorInfo que fornece informações sobre o objeto de erro do DAO que você recuperou pela última vez chamando GetErrorInfo.

Comentários

Esse objeto contém as seguintes informações:

Membro CDaoErrorInfo Informações Significado
m_lErrorCode Código de erro O código de erro do DAO
m_strSource Origem O nome do objeto ou aplicativo que gerou o erro originalmente
m_strDescription Descrição Uma cadeia de caracteres descritiva associada a um erro
m_strHelpFile Arquivo de ajuda Um caminho para um arquivo da Ajuda do Windows no qual o usuário pode obter informações sobre o problema
m_lHelpContext Contexto de ajuda A ID de contexto de um tópico no arquivo de Ajuda do DAO

Para obter detalhes completos sobre as informações contidas no objeto CDaoErrorInfo, confira a estrutura CDaoErrorInfo.

CDaoException::m_scode

Contém um valor de tipo SCODE que descreve o erro.

Comentários

Este é um código OLE. Você raramente precisará usar esse valor porque, em quase todos os casos, informações de erro mais específicas do MFC ou DAO estão disponíveis nos outros CDaoException membros de dados.

Para obter informações sobre o SCODE, confira o tópico Estrutura de códigos de erro OLE no SDK do Windows. O tipo de dados SCODE é mapeado para o tipo de dados HRESULT.

Confira também

Classe CException
Gráfico da hierarquia