2025-11-28 00:35:46 +09:00

380 lines
9.0 KiB
C++

//-----------------------------------------------------------------------------
// Microsoft OLE DB RowsetViewer
// Copyright (C) 1994 - 1999 By Microsoft Corporation.
//
// @doc
//
// @module CDATASOURCE.CPP
//
//-----------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////
// Includes
//
/////////////////////////////////////////////////////////////////
#include "Headers.h"
/////////////////////////////////////////////////////////////////
// CError::CError
//
/////////////////////////////////////////////////////////////////
CError::CError(CMainWindow* pCMainWindow)
: CBase(eCError, pCMainWindow, NULL)
{
//OLE DB Interfaces
m_pIErrorInfo = NULL; //Error interface
m_pIErrorRecords = NULL; //Error interface
}
/////////////////////////////////////////////////////////////////
// CError::~CError
//
/////////////////////////////////////////////////////////////////
CError::~CError()
{
ReleaseObject(0);
}
/////////////////////////////////////////////////////////////////
// IUnknown** CError::GetInterfaceAddress
//
/////////////////////////////////////////////////////////////////
IUnknown** CError::GetInterfaceAddress(REFIID riid)
{
HANDLE_GETINTERFACE(IErrorInfo);
HANDLE_GETINTERFACE(IErrorRecords);
//Otherwise delegate
return CBase::GetInterfaceAddress(riid);
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::AutoRelease
//
/////////////////////////////////////////////////////////////////
HRESULT CError::AutoRelease()
{
//Error
RELEASE_INTERFACE(IErrorInfo);
RELEASE_INTERFACE(IErrorRecords);
//Delegate
return CBase::AutoRelease();
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::AutoQI
//
/////////////////////////////////////////////////////////////////
HRESULT CError::AutoQI(DWORD dwCreateOpts)
{
//Delegate First so we have base interfaces
CBase::AutoQI(dwCreateOpts);
//[MANDATORY]
if(dwCreateOpts & CREATE_QI_MANDATORY)
{
OBTAIN_INTERFACE(IErrorInfo);
OBTAIN_INTERFACE(IErrorRecords);
}
//[OPTIONAL]
if(dwCreateOpts & CREATE_QI_OPTIONAL)
{
}
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// CError::GetObjectDesc
//
/////////////////////////////////////////////////////////////////////////////
WCHAR* CError::GetObjectDesc()
{
if(!m_strObjectDesc)
{
CComBSTR bstr;
if(SUCCEEDED(GetDescription(&bstr)) && bstr)
m_strObjectDesc.CopyFrom(bstr);
}
return m_strObjectDesc;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetDescription
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetDescription(BSTR* pbstrDescription)
{
HRESULT hr = S_OK;
if(m_pIErrorInfo)
{
//IErrorInfo::GetDescription
XTEST(hr = m_pIErrorInfo->GetDescription(pbstrDescription));
TRACE_METHOD(hr, L"IErrorInfo::GetDescription(&\"%s\")", pbstrDescription ? *pbstrDescription : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetSource
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetSource(BSTR* pbstrSource)
{
HRESULT hr = S_OK;
if(m_pIErrorInfo)
{
//IErrorInfo::GetSource
XTEST(hr = m_pIErrorInfo->GetSource(pbstrSource));
TRACE_METHOD(hr, L"IErrorInfo::GetSource(&\"%s\")", pbstrSource ? *pbstrSource : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetHelpFile
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetHelpFile(BSTR* pbstrHelpFile)
{
HRESULT hr = S_OK;
if(m_pIErrorInfo)
{
//IErrorInfo::GetHelpFile
XTEST(hr = m_pIErrorInfo->GetHelpFile(pbstrHelpFile));
TRACE_METHOD(hr, L"IErrorInfo::GetHelpFile(&\"%s\")", pbstrHelpFile ? *pbstrHelpFile : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetHelpContext
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetHelpContext(DWORD* pdwHelpContext)
{
HRESULT hr = S_OK;
if(m_pIErrorInfo)
{
//IErrorInfo::GetHelpContext
XTEST(hr = m_pIErrorInfo->GetHelpContext(pdwHelpContext));
TRACE_METHOD(hr, L"IErrorInfo::GetHelpContext(&0x%08x)", pdwHelpContext ? *pdwHelpContext : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetGUID
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetGUID(GUID* pGuid)
{
HRESULT hr = S_OK;
WCHAR* pwszProgID = NULL;
if(m_pIErrorInfo)
{
//IErrorInfo::GetGUID
XTEST(hr = m_pIErrorInfo->GetGUID(pGuid));
if(pGuid)
pwszProgID = GetProgID(*pGuid);
TRACE_METHOD(hr, L"IErrorInfo::GetGuid(&\"%s\")", pwszProgID);
}
SAFE_FREE(pwszProgID);
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetRecordCount
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetRecordCount(ULONG* pulCount)
{
HRESULT hr = S_OK;
if(m_pIErrorRecords)
{
//IErrorRecords::GetRecordCount
XTEST(hr = m_pIErrorRecords->GetRecordCount(pulCount));
TRACE_METHOD(hr, L"IErrorRecords::GetRecordCount(&%d)", pulCount ? *pulCount : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetCustomErrorObject
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetCustomErrorObject(ULONG ulRecordNum, REFIID riid, IUnknown** ppObject)
{
HRESULT hr = S_OK;
if(m_pIErrorRecords)
{
//IErrorRecords::GetCustomErrorObject
XTEST(hr = m_pIErrorRecords->GetCustomErrorObject(ulRecordNum, riid, ppObject));
TRACE_METHOD(hr, L"IErrorRecords::GetCustomErrorObject(%lu, %s, &%p)", ulRecordNum, GetInterfaceName(riid), ppObject ? *ppObject : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// HRESULT CError::GetErrorInfo
//
/////////////////////////////////////////////////////////////////
HRESULT CError::GetErrorInfo(ULONG ulRecordNum, LCID lcid, IErrorInfo** ppErrorInfo)
{
HRESULT hr = S_OK;
if(m_pIErrorRecords)
{
//IErrorRecords::GetErrorInfo
XTEST(hr = m_pIErrorRecords->GetErrorInfo(ulRecordNum, lcid, ppErrorInfo));
TRACE_METHOD(hr, L"IErrorRecords::GetErrorInfo(%lu, %ld, &%p)", ulRecordNum, lcid, ppErrorInfo ? *ppErrorInfo : NULL);
}
return hr;
}
/////////////////////////////////////////////////////////////////
// CCustomError::CCustomError
//
/////////////////////////////////////////////////////////////////
CCustomError::CCustomError(CMainWindow* pCMainWindow)
: CBase(eCCustomError, pCMainWindow, NULL)
{
//OLE DB Interfaces
m_pISQLErrorInfo = NULL; //Error interface
}
/////////////////////////////////////////////////////////////////
// CCustomError::~CCustomError
//
/////////////////////////////////////////////////////////////////
CCustomError::~CCustomError()
{
ReleaseObject(0);
}
/////////////////////////////////////////////////////////////////
// IUnknown** CCustomError::GetInterfaceAddress
//
/////////////////////////////////////////////////////////////////
IUnknown** CCustomError::GetInterfaceAddress(REFIID riid)
{
HANDLE_GETINTERFACE(ISQLErrorInfo);
//Otherwise delegate
return CBase::GetInterfaceAddress(riid);
}
/////////////////////////////////////////////////////////////////
// HRESULT CCustomError::AutoRelease
//
/////////////////////////////////////////////////////////////////
HRESULT CCustomError::AutoRelease()
{
//Error
RELEASE_INTERFACE(ISQLErrorInfo);
//Delegate
return CBase::AutoRelease();
}
/////////////////////////////////////////////////////////////////
// HRESULT CCustomError::AutoQI
//
/////////////////////////////////////////////////////////////////
HRESULT CCustomError::AutoQI(DWORD dwCreateOpts)
{
//Delegate First so we have base interfaces
CBase::AutoQI(dwCreateOpts);
//[MANDATORY]
if(dwCreateOpts & CREATE_QI_MANDATORY)
{
}
//[OPTIONAL]
if(dwCreateOpts & CREATE_QI_OPTIONAL)
{
OBTAIN_INTERFACE(ISQLErrorInfo);
}
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// CCustomError::GetObjectDesc
//
/////////////////////////////////////////////////////////////////////////////
WCHAR* CCustomError::GetObjectDesc()
{
if(!m_strObjectDesc)
{
CComBSTR bstr;
LONG lNativeError = 0;
//ISQLErrorInfo::GetSQLInfo
if(SUCCEEDED(GetSQLInfo(&bstr, &lNativeError)) && bstr)
{
m_strObjectDesc.CopyFrom(bstr);
}
}
return m_strObjectDesc;
}
/////////////////////////////////////////////////////////////////
// HRESULT CCustomError::GetSQLInfo
//
/////////////////////////////////////////////////////////////////
HRESULT CCustomError::GetSQLInfo(BSTR* pbstrSQLState, LONG* plNativeError)
{
HRESULT hr = S_OK;
if(m_pISQLErrorInfo)
{
//ISQLErrorInfo::GetSQLInfo
XTEST(hr = m_pISQLErrorInfo->GetSQLInfo(pbstrSQLState, plNativeError));
TRACE_METHOD(hr, L"ISQLErrorInfo::GetSQLInfo(&\"%s\", &%ld)", pbstrSQLState ? *pbstrSQLState : NULL, plNativeError ? *plNativeError : NULL);
}
return hr;
}