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

📄 telprvdrs.h

📁 visual c++ 实例编程
💻 H
字号:
// TelPrvdRS.h : Declaration of the CTelPrvdRowset
#ifndef __CTelPrvdRowset_H_
#define __CTelPrvdRowset_H_
#include "resource.h"       // main symbols
class CTelPrvdRowset;
class CTelPrvdCommand;
class CTelPrvdWindowsFile
{
public:
	TCHAR   szName[256];//姓名
	TCHAR   szEMail[256];//e-mial
	TCHAR   szTele[256];//联系电话
	TCHAR   szCompany[256];//工作单位
	TCHAR   szVocation[256];//职位
	TCHAR   szAs_it_is[1024];//写真

	static ATLCOLUMNINFO* GetColumnInfo(CTelPrvdRowset* pThis, ULONG* pcCols);
	static ATLCOLUMNINFO* GetColumnInfo(CTelPrvdCommand* pThis, ULONG* pcCols);

};
// CTelPrvdCommand
class ATL_NO_VTABLE CTelPrvdCommand : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IAccessorImpl<CTelPrvdCommand>,
	public ICommandTextImpl<CTelPrvdCommand>,
	public ICommandPropertiesImpl<CTelPrvdCommand>,
	public IObjectWithSiteImpl<CTelPrvdCommand>,
	public IConvertTypeImpl<CTelPrvdCommand>,
	public IColumnsInfoImpl<CTelPrvdCommand>
{
public:
BEGIN_COM_MAP(CTelPrvdCommand)
	COM_INTERFACE_ENTRY(ICommand)
	COM_INTERFACE_ENTRY(IObjectWithSite)
	COM_INTERFACE_ENTRY(IAccessor)
	COM_INTERFACE_ENTRY(ICommandProperties)
	COM_INTERFACE_ENTRY2(ICommandText, ICommand)
	COM_INTERFACE_ENTRY(IColumnsInfo)
	COM_INTERFACE_ENTRY(IConvertType)
END_COM_MAP()
// ICommand
public:
	HRESULT FinalConstruct()
	{
		HRESULT hr = CConvertHelper::FinalConstruct();
		if (FAILED (hr))
			return hr;
		hr = IAccessorImpl<CTelPrvdCommand>::FinalConstruct();
		if (FAILED(hr))
			return hr;
		return CUtlProps<CTelPrvdCommand>::FInit();
	}
	void FinalRelease()
	{
		IAccessorImpl<CTelPrvdCommand>::FinalRelease();
	}
	HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams, 
						  LONG * pcRowsAffected, IUnknown ** ppRowset);
	static ATLCOLUMNINFO* GetColumnInfo(CTelPrvdCommand* pv, ULONG* pcInfo)
	{
		return CTelPrvdWindowsFile::GetColumnInfo(pv,pcInfo);
	}

BEGIN_PROPSET_MAP(CTelPrvdCommand)
	BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
		PROPERTY_INFO_ENTRY_EX( IAccessor, 
					VT_BOOL, DBPROPFLAGS_ROWSET |
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IColumnsInfo, 
					VT_BOOL, DBPROPFLAGS_ROWSET |
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IConvertType, 
					VT_BOOL, DBPROPFLAGS_ROWSET | 
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IRowset,    
					VT_BOOL, DBPROPFLAGS_ROWSET |
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IRowsetIdentity,
					VT_BOOL, DBPROPFLAGS_ROWSET | 
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IRowsetInfo,    
					VT_BOOL, DBPROPFLAGS_ROWSET |
					DBPROPFLAGS_READ, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( IRowsetLocate,  
					VT_BOOL, 
					DBPROPFLAGS_ROWSET|DBPROPFLAGS_READ|
					DBPROPFLAGS_WRITE, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( BOOKMARKS,
					VT_BOOL, DBPROPFLAGS_DATASOURCEINFO| 
					DBPROPFLAGS_READ |DBPROPFLAGS_WRITE, 
					VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( BOOKMARKSKIPPED,VT_BOOL, 
					DBPROPFLAGS_DATASOURCEINFO|
					DBPROPFLAGS_READ,0,0)
		PROPERTY_INFO_ENTRY_EX( BOOKMARKTYPE, VT_I4, 
					DBPROPFLAGS_DATASOURCEINFO|
					DBPROPFLAGS_READ,0,0)
		PROPERTY_INFO_ENTRY_EX( CANFETCHBACKWARDS,
					VT_BOOL, DBPROPFLAGS_DATASOURCEINFO|
					DBPROPFLAGS_READ|
					DBPROPFLAGS_WRITE, 0, 0)
		PROPERTY_INFO_ENTRY_EX( CANHOLDROWS, 
					VT_BOOL, DBPROPFLAGS_DATASOURCEINFO|
					DBPROPFLAGS_READ|DBPROPFLAGS_WRITE,
					VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( CANSCROLLBACKWARDS,
					VT_BOOL, DBPROPFLAGS_DATASOURCEINFO|
					DBPROPFLAGS_READ,VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( LITERALBOOKMARKS,VT_BOOL, 
					DBPROPFLAGS_ROWSET|DBPROPFLAGS_READ| 
					DBPROPFLAGS_WRITE, VARIANT_TRUE, 0)
		PROPERTY_INFO_ENTRY_EX( ORDEREDBOOKMARKS,VT_BOOL, 
					DBPROPFLAGS_ROWSET|DBPROPFLAGS_READ| 
					DBPROPFLAGS_WRITE, VARIANT_TRUE, 0)
	END_PROPERTY_SET(DBPROPSET_ROWSET)
END_PROPSET_MAP()
};
class CTelPrvdRowset : public CRowsetImpl< CTelPrvdRowset, CTelPrvdWindowsFile, CTelPrvdCommand>
{
public:
	HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
	{
		USES_CONVERSION;
		FILE* pFile;
		TCHAR szString[256];
		TCHAR szFile[MAX_PATH];
		size_t nLength;
		ObjectLock lock(this);

		//m_strCommandText记录从服务器传过来的文件名,
		if (m_strCommandText == (BSTR)NULL)
		{
			ATLTRACE("文件名不能为空!");
			return E_FAIL;
		}

		//打开文件
		_tcscpy(szFile, OLE2T(m_strCommandText));
		if (szFile[0] == _T('\0') || ((pFile = fopen(&szFile[0], "r")) == NULL))
		{
			ATLTRACE("文件打不开!");
			return DB_E_NOTABLE;
		}

		//遍历文件,每行应包括由"#"分开的六个字段
		LONG cFiles = 0;
		while (fgets(szString, 256, pFile) != NULL)
		{
			nLength = strlen(szString);
			//去掉行回车符!
			szString[nLength-1] = '\0';
			int i = 0;
			CTelPrvdWindowsFile wf;
			char seps[]   = "#";//字段分界标志
			char *token;
			token = strtok( szString, seps );
			while( token != NULL && i<=5 )
			{	
				//按位置把字段加入对应变量
				switch( i )
				{
				case 0:
					_tcscpy(wf.szName, token);												
					break;
				case 1:
					_tcscpy(wf.szEMail, token);
					break;
				case 2:
					_tcscpy(wf.szTele, token);
					break;
				case 3:
					_tcscpy(wf.szCompany, token);
					break;
				case 4:
					_tcscpy(wf.szVocation, token);
					break;
				case 5:
					_tcscpy(wf.szAs_it_is, token);
					break;
				default:
					break;												
				}
				i++;
				token = strtok( NULL, seps );
			}
			//把记录加入数组中
			if (!m_rgRowData.Add(wf))
			{
				ATLTRACE("把记录加入数组时系统出错!");
				fclose(pFile);
				return E_FAIL;
			}
		}

		if (pcRowsAffected != NULL)
			*pcRowsAffected = cFiles;
		return S_OK;
	}
};
#endif //__CTelPrvdRowset_H_

⌨️ 快捷键说明

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