Пример:
extern char* pFileName; TRY
{ CFile f( pFileName, CFile::modeCreate | CFile::modeWrite ); } САТСЩ CFileException, e)
{ if( e->m_cause == CFileException: :fileNotFound )
printf( "ERROR: Файл не найден\п"); }
END_CATCH
CFileException: :m_10sError
Данная общедоступная переменная класса имеет тип LONG и содержит определяемый операционной системой код ошибки возникшего исключения.
CFileException::m_strFileName
Переменная класса, содержащая имя файла, для которого возникло данное исключение.
Класс CdaoException
Объект исключения CDaoException создается и бросается методами DAO-классов (Data Access Object). DAO-классы представляют набор объектов высокого уровня, освобождающих разработчиков от физических деталей записи и чтения записей. Эти объекты позволяют программировать в терминах баз данных, таблиц, полей, индексов и запросов.
Класс CDaoException содержит общедоступные переменные класса, позволяющие разработчику определить причину возникновения исключения.
Для броска исключений данного класса можно использовать глобальную функцию AixThrowDaoException.
При использовании MFC все ошибки, возникающие при работе с DAO-объектами, выражаются исключениями типа CDaoException. При броске исключения данного типа можно использовать члены класса CDaoException для получения информации от любых ошибок DAO-объектов, хранимых в наборе ошибок машины баз данных. При возникновении ошибки создается один или несколько объектов ошибок, размещаемых в наборе ошибок. Как правило, набор ошибок состоит только из одного объекта ошибки. Однако при использовании источника данных, подключаемого через ODBC, может быть создано несколько объектов ошибок.
Набор ошибок заполняется каждый раз заново при возникновении новой ошибки выполнения оператора DAO.
Коды DAO-ошибок описаны в файле DAOERR.H.
Подключение данного класса выполняется оператором #include <afxdao.h>.
Члены класса cDaoException( );
Конструктор класса CDaoException. short GetErrorCount( );
Метод возвращает количество ошибок в наборе ошибок машины баз данных. Эта информация может использоваться для организации цикла обработки ошибок из набора ошибок машины баз данных (при использовании источника данных, подключенного через ODBC), void GetErrorInfo( int nlndex );
Метод возвращает информацию об ошибке из набора ошибок по индексу ошибки.
Параметры: nlndex - номер ошибки в наборе ошибок машины баз данных.
Вызов данного метода позволяет получить следующую информацию об ошибке:
• код ошибки (Error Code),
• источник(8оигсе),
• описание (Description),
• файл справки (Help File),
• ID контекста (Help Context).
Метод GetErrorlnfo заносит эту информацию в переменную класса m_pEiTorInfo.
Переменные класса
CDaoException: :m_scode_
Значение типа SCODE, описывающее ошибку (OLE-код). CDaoException:: mnAfxDaoError
Содержит расширенный код ошибки для любой ошибки, инициированной DAO-классами.
Данная переменная может принимать следующие значения:
NO_AFX_DAOJERROR
AFX_DAO_ERROR_ENGINE_INITIALIZATION AFX_DAO_ERROR_DFX_BIND AFX_DAO_ERROR_OBJECT_NOT_OPEN
CDaoException::m_pErrorInfo
Указатель на объект CDaoErrorlnfo, содержащий информацию об ошибке.
Информация об ошибке описывается структурой, приведенной в следующей таблице.
Члены CDaoErrorlnfo Описание mJErrorCode DAO-код ошибки m_strSource Имя объекта или приложения, инициировавшего возникновение ошибки m strDescription Строка, описывающая ошибку m strHelpFile Файл справки с информацией о данной ошибке m lHelpContext ID темы в файле справки |
Класс CDBException
Объект CDBException описывает исключение, инициируемое классами баз данных (ODBC-классами). Общедоступные переменные данного класса можно использовать для получения информации о возникшей ошибке.
Для броска данного исключения можно использовать глобальную функцию AfxThrowDBException.
Для использования возможностей данного класса следует подключить библиотеку <afcdb.h>.
Члены класса
CDBException: :m_nRetCode
Переменная типа RETCODE содержит код ошибки выполнения API-функции (Application Programming Interface) ODBC-приложения. Данный тип включает коды с префиксом SQL, определяемые ODBC, и коды с префиксом AFX_SQL, определяемые классами баз данных.
Данная переменная может принимать одно из следующих значений:
AFX_SQL_ERROR_API_
AFX_SQL_ERROR_CONNECT_FAIL
AFX_SQL_ERROR_DATA_TRUNCATED
AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED
AFX_SQL_ERROR_EMPTY_COLUMN_LIST
AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH
AFX_SQL_ERROR_ILLEGAL_MODE
AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED
AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED
AFX_SQL_ERROR_NO_CURRENT_RECORD
AFX_SQL_ERROR_NO_POSITIONEELUPDATES
AFX_SQL_ERROR_NO_ROWS_AFFECTED
AFX_SQL_ERROR_ODBC_LOAD_FAILED
AFX_SQL_ERROR_ODBC_V2_REQUIRED
AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY
AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED
AFX_SQL_ERROR_SQL_CONFORMANCE
AFX_SQL_ERROR_SQL_NO_TOTAL
AFX_SQL_ERROR_RECORDSET_READONLY
SQL_ERROR
SQLJNVALID_HANDLE.
CDBException::m_strError
Данная переменная класса содержит строку, описывающую ошибку. CDBException::m_strStateNativeOrigin
Данная переменная класса содержит строку, описывающую ошибку в | терминах кодов ошибок, возвращаемых средствами ODBC.
Строка представляется в nfrjq форме: "State:%s,Native:%ld,Origin:%s". В ней I указываются следующие три кода:
• код SQLSTATE, представляющий пятисимвольный код ошибки ODBC, возвращаемый параметром szSqlState функции ::SQLError;
• код ошибки, указываемый для источника данных, возвращаемый пара-^ j метром pfNativeError функции ::SQLError;
• текст сообщения об ошибке, возвращаемый параметром szErrorMsg функции ::SQLError. Это сообщение содержит ряд имен, заключенных в квадратные скобки. Эти имена добавляются по мере передачи ошиб-ки от источника к пользователю каждым компонентом ODBC: источником данных, драйвером, машиной баз данных.
Пример:
От ODBC:
"State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Invalid column name 'ColName'" В m_strStateNativeOrigm: "State:S0022,Native:207,Origin: [Microsoft] [ODBC SQL Server Driver] [SQL
Server]"
В m_strError:
"Invalid column name 'ColName'"
Класс CmemoryException
Объект CMemoryException создается при запросе отсутствующей памяти. Это исключение бросается автоматически оператором new. Для того, чтобы избежать автоматического броска исключения при отсутствии требуемой для объекта памяти, следует использовать, например, функцию выделения памяти malloc.
Для непосредственного броска данного исключения следует использовать глобальную функцию AixThrowMemoryException.
Класс CnotSupportedException
Исключение CNotSupportedException происходит в результате запроса неподдерживаемых операций. Для непосредственного броска данного исключения можно использовать глобальную функцию AfxThrowNotSupportedException.
Класс CresourceException
Объект CResourceException создается в том случае, если Windows не может найти или разместить требуемый ресурс.
Для непосредственного броска данного исключения можно использовать глобальную функцию AfxThrowResourceException.
Класс CuserException
Исключение CUserException используется для прерывания операций, инициированных пользователем. Как правило, это исключение бросается после вызова глобальной функции AfrMessageBox, отображающей окно сообщения об ошибке.
Для непосредственного броска данного исключения можно использовать глобальную функцию AfxThrowUserException.