⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccrrowsetimpl.h

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 H
字号:
/****************************************************************************** * $Id: CCRRowsetImpl.h,v 1.1 2002/08/09 21:36:38 warmerda Exp $ * * Project:  OpenGIS Simple Features Reference Implementation * Purpose:  IAccessor implementation that doesn't suffer IAccessorImpl's *           problem with confusion of accessor handle ids.  * Author:   Frank Warmerdam <warmerdam@pobox.com> * * This code is closely derived from the code in ATLDB.H for CRowsetImpl. * It is basically the same as CRowsetImpl, but is built on ICRRowsetImpl * instead of IRowsetImpl. * ****************************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: CCRRowsetImpl.h,v $ * Revision 1.1  2002/08/09 21:36:38  warmerda * New * * Revision 1.1  2001/10/15 15:15:40  warmerda * New * */#ifndef _CCRRowsetImpl_INCLUDED#define _CCRRowsetImpl_INCLUDEDtemplate <class T, class Storage, class CreatorClass,	  class ArrayType = CAtlArray<Storage>,	  class RowClass = CSimpleRow,	  class RowsetInterface = ICRRowsetImpl < T, IRowset, RowClass> >class CCRRowsetImpl :	public CComObjectRootEx<CreatorClass::_ThreadModel>,	public IAccessorImpl<T>,	public IRowsetIdentityImpl<T, RowClass>,	public IRowsetCreatorImpl<T>,	public IRowsetInfoImpl<T, CreatorClass::_PropClass>,	public IColumnsInfoImpl<T>,	public IConvertTypeImpl<T>,	public RowsetInterface{public:	typedef CreatorClass _RowsetCreatorClass;	typedef ArrayType _RowsetArrayType;	typedef CCRRowsetImpl< T, Storage, CreatorClass, ArrayType, RowClass, RowsetInterface> _RowsetBaseClass;BEGIN_COM_MAP(CCRRowsetImpl)	COM_INTERFACE_ENTRY(IAccessor)	COM_INTERFACE_ENTRY(IObjectWithSite)	COM_INTERFACE_ENTRY(IRowsetInfo)	COM_INTERFACE_ENTRY(IColumnsInfo)	COM_INTERFACE_ENTRY(IConvertType)	COM_INTERFACE_ENTRY(IRowsetIdentity)	COM_INTERFACE_ENTRY(IRowset)END_COM_MAP()	HRESULT FinalConstruct()	{		HRESULT hr = IAccessorImpl<T>::FinalConstruct();		if (FAILED(hr))			return hr;		return CConvertHelper::FinalConstruct();	}	HRESULT NameFromDBID(DBID* pDBID, CComBSTR& bstr, bool bIndex)	{		if (pDBID->uName.pwszName != NULL)		{			bstr = pDBID->uName.pwszName;			if (m_strCommandText == (BSTR)NULL)				return E_OUTOFMEMORY;			return S_OK;		}		return (bIndex) ? DB_E_NOINDEX : DB_E_NOTABLE;	}	HRESULT GetCommandFromID(DBID* pTableID, DBID* pIndexID)	{		USES_CONVERSION;		HRESULT hr;		if (pTableID == NULL && pIndexID == NULL)			return E_INVALIDARG;		if (pTableID != NULL && pTableID->eKind == DBKIND_NAME)		{			hr = NameFromDBID(pTableID, m_strCommandText, true);			if (FAILED(hr))				return hr;			if (pIndexID != NULL)			{				if (pIndexID->eKind == DBKIND_NAME)				{					hr = NameFromDBID(pIndexID, m_strIndexText, false);					if (FAILED(hr))					{						m_strCommandText.Empty();						return hr;					}				}				else				{					m_strCommandText.Empty();					return DB_E_NOINDEX;				}			}			return S_OK;		}		if (pIndexID != NULL && pIndexID->eKind == DBKIND_NAME)			return NameFromDBID(pIndexID, m_strIndexText, false);		return S_OK;	}	HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)	{		HRESULT hr = S_OK;		if (pTableID != NULL)		{			hr = CUtlProps<T>::IsValidDBID(pTableID);			if (hr != S_OK)				return hr;			// Check for a NULL TABLE ID (where its a valid pointer but NULL)			if ((pTableID->eKind == DBKIND_GUID_NAME ||				pTableID->eKind == DBKIND_NAME ||				pTableID->eKind == DBKIND_PGUID_NAME)				&& pTableID->uName.pwszName == NULL)				return DB_E_NOTABLE;		}		if (pIndexID != NULL)			hr = CUtlProps<T>::IsValidDBID(pIndexID);		return hr;	}	HRESULT SetCommandText(DBID* pTableID, DBID* pIndexID)	{		T* pT = (T*)this;		HRESULT hr = pT->ValidateCommandID(pTableID, pIndexID);		if (FAILED(hr))			return hr;		hr = pT->GetCommandFromID(pTableID, pIndexID);		return hr;	}	void FinalRelease()	{		m_rgRowData.RemoveAll();	}	static ATLCOLUMNINFO* GetColumnInfo(T* pv, ULONG* pcCols)	{		return Storage::GetColumnInfo(pv,pcCols);	}	CComBSTR m_strCommandText;	CComBSTR m_strIndexText;	ArrayType m_rgRowData;};#endif // ifndef _CCRRowsetImpl_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -