//-------------------------------------------------------------------- // Microsoft OLE DB Test // // Copyright 1995-2000 Microsoft Corporation. // // @doc // // @module Extended Error Class Header Module | Declaration of Extended Error Class // // @comm // Special Notes...: (OPTIONAL NOTES FOR SPECIAL CIRCUMSTANCES) // // // Revision History: // // [00] MM-DD-YY EMAIL_NAME ACTION PERFORMED... // [01] 03-04-96 Microsoft Created // [02] 12-01-96 Microsoft Updated for release // // @head3 CExtError Elements| // // @subindex CExtError| // //--------------------------------------------------------------------------- #ifndef __CEXTERR_HPP_ #define __CEXTERR_HPP_ #include "modstandard.hpp" #include "miscfunc.h" //-------------------------------------------------------------------- // @Class CExtError | Extended Error Class // // The class is used to validate extended error inforation. // //-------------------------------------------------------------------- class CExtError { // @access Protected protected: // @cmember Base error object to increment when we encounter problems. CError * m_pError; // @cmember Valid locale id. LCID m_lcid; // @cmember Flag to indicate if customer error object supports ISQLErrorInfo. BOOL m_fIsODBCProvider; // @cmember Current provider's CLSID, which we use to determine m_fIsODBCProvider. CLSID m_ProviderClsid; // @cmember File name from which ValidateExtended was last called. WCHAR* m_pwszFileName; // @cmember File line from which ValidateExtended was last called. ULONG m_ulLine; // @cmember What ref count for error object should be, based on what we've done. ULONG m_ulRefCount; // @cmember Interface to error object. IErrorInfo * m_pIErrorInfo; // @cmember Interface to error object. IErrorRecords * m_pIErrorRecords; // @cmember HRESULT received by method which is being verified by ValidateExtended. HRESULT m_MethodReceivedHr; // @cmember IID for interface of method which is being verified by ValidateExtended. IID m_iid; // @cmember IID for interface of method which causes the previous error. IID m_PreErrIID; // @cmember HRESULT received by method which causes the previous error. HRESULT m_PreErrHr; // @cmember Print the error description. BOOL m_fPrint; // @cmember Validates the error description. BOOL ValidateErrorDescp(BSTR bstr); // @cmember Set the error message. void setErrorMsg(LPOLESTR *errorMsg); // @access Public public: // @cmember CTOR. CExtError(CLSID ProviderClassID, CError * pError, BOOL fLocalize = FALSE); virtual ~CExtError(void); // @cmember Validates the extended error info if applicable. virtual BOOL ValidateExtended(HRESULT MethodReceivedHr, IUnknown * pIUnknown, IID iid, LPWSTR wszFile, ULONG ulLine); // @cmember Validates the current error object contains correct info. virtual BOOL ValidateErrorObject(); // @cmember Validates a specific error record. virtual BOOL ValidateErrorRecord(ULONG ulRecordNum, IErrorInfo * pRecordIErrorInfo); // @cmember Verifies the error object contains correct info. virtual void LogString(LPWSTR wszError, BOOL fIncrementError = FALSE); // @cmember Validates custom error object if ISQLErrorInfo is supported, else returns TRUE. virtual BOOL ValidateCustomErrorObject(ULONG ulRecordNum, IUnknown * pIUnkCustom); // @cmember Logs all IErrorInfo for a record for manual verification. BOOL LogErrorInfo(ULONG ulRecordNum, IErrorInfo * pRecordIErrorInfo); // @cmember Generates error object, to be used in conjunction with successful. // method call and ValidateExtended(). BOOL CauseError(); }; //----------------------------------------------------------------------------------------------- // Constants //----------------------------------------------------------------------------------------------- const GUID Kagera_ClassID = {0xC8B522CBL,0x5CF3,0x11CE,{0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D}}; const GUID ENUMERATOR_ClassID = {0xC8B522CDL,0x5CF3,0x11CE,{0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D}}; const WCHAR wszColon[] = L": "; //----------------------------------------------------------------------------------------------- // Define //----------------------------------------------------------------------------------------------- #define ERRORMSG_BUFFER 256 //----------------------------------------------------------------------------------------------- // Enum //----------------------------------------------------------------------------------------------- enum ERRORCODE { EC_UNEXPECTED = 0, EC_FAIL =1, EC_NOINTERFACE =2, EC_INVALIDARG =3, EC_BADACCESSORHANDLE, EC_ROWLIMITEXCEEDED, EC_READONLYACCESSOR, EC_SCHEMAVIOLATION, EC_BADROWHANDLE, EC_OBJECTOPEN, EC_BADCHAPTER, EC_CANTCONVERTVALUE, EC_BADBINDINFO, EC_PERMISSIONDENIED, EC_NOTAREFERENCECOLUMN, EC_LIMITREJECTED, EC_NOCOMMAND, EC_COSTLIMIT, EC_BADBOOKMARK, EC_BADLOCKMODE, EC_PARAMNOTOPTIONAL, EC_BADCOLUMNID, EC_BADRATIO, EC_BADVALUES, EC_ERRORSINCOMMAND, EC_CANTCANCEL, EC_DIALECTNOTSUPPORTED, EC_DUPLICATEDATASOURCE, EC_CANNOTRESTART, EC_NOTFOUND, EC_CANNOTFREE, EC_NEWLYINSERTED, EC_GOALREJECTED, EC_UNSUPPORTEDCONVERSION, EC_BADSTARTPOSITION, EC_NOQUERY, EC_NOTREENTRANT, EC_ERRORSOCCURRED, EC_NOAGGREGATION, EC_DELETEDROW, EC_CANTFETCHBACKWARDS, EC_ROWSNOTRELEASED, EC_BADSTORAGEFLAG, EC_BADCOMPAREOP, EC_BADSTATUSVALUE, EC_CANTSCROLLBACKWARDS, EC_BADREGIONHANDLE, EC_NONCONTIGUOUSRANGE, EC_INVALIDTRANSITION, EC_NOTASUBREGION, EC_MULTIPLESTATEMENTS, EC_INTEGRITYVIOLATION, EC_BADTYPENAME, EC_ABORTLIMITREACHED, EC_ROWSETINCOMMAND, EC_CANTTRANSLATE, EC_DUPLICATEINDEXID, EC_NOINDEX, EC_INDEXINUSE, EC_NOTABLE, EC_CONCURRENCYVIOLATION, EC_BADCOPY, EC_BADPRECISION, EC_BADSCALE, EC_BADTABLEID, EC_BADTYPE, EC_DUPLICATECOLUMNID, EC_DUPLICATETABLEID, EC_TABLEINUSE, EC_NOLOCALE, EC_BADRECORDNUM, EC_BOOKMARKSKIPPED, EC_BADPROPERTYVALUE, EC_INVALID, EC_BADACCESSORFLAGS, EC_BADSTORAGEFLAGS, EC_BYREFACCESSORNOTSUPPORTED, EC_NULLACCESSORNOTSUPPORTED, EC_NOTPREPARED, EC_BADACCESSORTYPE, EC_WRITEONLYACCESSOR, EC_AUTH_FAILED, EC_CANCELED, EC_CHAPTERNOTRELEASED, EC_BADSOURCEHANDLE, EC_PARAMUNAVAILABLE, EC_ALREADYINITIALIZED, EC_NOTSUPPORTED, EC_MAXPENDCHANGESEXCEEDED, EC_BADORDINAL, EC_PENDINGCHANGES, EC_DATAOVERFLOW, EC_BADHRESULT, EC_BADLOOKUPID, EC_BADDYNAMICERRORID, EC_PENDINGINSERT, EC_BADCONVERTFLAG }; //----------------------------------------------------------------------------------------------- // Macros //----------------------------------------------------------------------------------------------- #define XCHECK(pIUnknown, iid, hr) m_pExtError->ValidateExtended(hr, pIUnknown, iid, \ LONGSTRING(__FILE__), __LINE__) #endif // __CEXTERR_HPP_