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

📄 oledbtextproviderrs.h

📁 vc++6.0数据库编程大全一书得各个章节得源码,比较详细.可以仔细参照学习!
💻 H
字号:
// OLEDBTextProviderRS.h : Declaration of the COLEDBTextProviderRowset
#ifndef __COLEDBTextProviderRowset_H_
#define __COLEDBTextProviderRowset_H_
#include "resource.h"       // main symbols
// Added by Chuck Wood for text file support
#include <stdio.h>
//Remove inheritance from class
class CTextFile
{
public:
	TCHAR strClass[51];
	TCHAR strSectionID[12];
	TCHAR strYear[7];
	TCHAR strTerm[31];
	TCHAR strInstructor[51];
	TCHAR strAssignment[256];
	TCHAR strScore[23];
	TCHAR strStudent[36];
BEGIN_PROVIDER_COLUMN_MAP(CTextFile)
	PROVIDER_COLUMN_ENTRY_STR("Class", 1, strClass)
	PROVIDER_COLUMN_ENTRY_STR("SectionID", 2, strSectionID)
	PROVIDER_COLUMN_ENTRY_STR("Year", 3, strYear)
	PROVIDER_COLUMN_ENTRY_STR("Term", 4, strTerm)
	PROVIDER_COLUMN_ENTRY_STR("Instructor", 5, strInstructor)
	PROVIDER_COLUMN_ENTRY_STR("Assignment", 6, strAssignment)
	PROVIDER_COLUMN_ENTRY_STR("Score", 7, strScore)
	PROVIDER_COLUMN_ENTRY_STR("Student", 8, strStudent)
END_PROVIDER_COLUMN_MAP()
};
// COLEDBTextProviderCommand
class ATL_NO_VTABLE COLEDBTextProviderCommand : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IAccessorImpl<COLEDBTextProviderCommand>,
	public ICommandTextImpl<COLEDBTextProviderCommand>,
	public ICommandPropertiesImpl<COLEDBTextProviderCommand>,
	public IObjectWithSiteImpl<COLEDBTextProviderCommand>,
	public IConvertTypeImpl<COLEDBTextProviderCommand>,
	public IColumnsInfoImpl<COLEDBTextProviderCommand>
{
public:
BEGIN_COM_MAP(COLEDBTextProviderCommand)
	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<COLEDBTextProviderCommand>::FinalConstruct();
		if (FAILED(hr))
			return hr;
		return CUtlProps<COLEDBTextProviderCommand>::FInit();
	}
	void FinalRelease()
	{
		IAccessorImpl<COLEDBTextProviderCommand>::FinalRelease();
	}
	HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams, 
						  LONG * pcRowsAffected, IUnknown ** ppRowset);
	static ATLCOLUMNINFO* GetColumnInfo(COLEDBTextProviderCommand* pv, ULONG* pcInfo)
	{
		return CTextFile::GetColumnInfo(pv,pcInfo);
	}
BEGIN_PROPSET_MAP(COLEDBTextProviderCommand)
	BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
		PROPERTY_INFO_ENTRY(IAccessor)
		PROPERTY_INFO_ENTRY(IColumnsInfo)
		PROPERTY_INFO_ENTRY(IConvertType)
		PROPERTY_INFO_ENTRY(IRowset)
		PROPERTY_INFO_ENTRY(IRowsetIdentity)
		PROPERTY_INFO_ENTRY(IRowsetInfo)
		PROPERTY_INFO_ENTRY(IRowsetLocate)
		PROPERTY_INFO_ENTRY(BOOKMARKS)
		PROPERTY_INFO_ENTRY(BOOKMARKSKIPPED)
		PROPERTY_INFO_ENTRY(BOOKMARKTYPE)
		PROPERTY_INFO_ENTRY(CANFETCHBACKWARDS)
		PROPERTY_INFO_ENTRY(CANHOLDROWS)
		PROPERTY_INFO_ENTRY(CANSCROLLBACKWARDS)
		PROPERTY_INFO_ENTRY(LITERALBOOKMARKS)
		PROPERTY_INFO_ENTRY(ORDEREDBOOKMARKS)
	END_PROPERTY_SET(DBPROPSET_ROWSET)
END_PROPSET_MAP()
};
class COLEDBTextProviderRowset : 
		public CRowsetImpl< COLEDBTextProviderRowset, 
			CTextFile, COLEDBTextProviderCommand>
{
private:
	void ColumnCopy(char* row, char* column, int length) {
        column[length] = 0;     //Null Terminate 
        StrTrim(column);        //Trim for users
	}

public:
	static char* GetFileName() {
		//Change this file name 
		//if you want to use a different one
		return "C:\\My Documents\\Visual C++\\StudentTextFile.txt";
	}
	static void StrTrim(char *instring) {
		static char strBlank[] = " \n";    // chars to strip
	// remove trailing spaces or newlines
		for (char *pchEnd = instring + strlen(instring);
			pchEnd != instring && strchr(
				strBlank, *(pchEnd - 1)) != NULL;
					*--pchEnd = '\0');
	// remove leading spaces or newlines
		char *pchStart = &instring[strspn(instring, strBlank)];
		memmove(instring, pchStart, 
			sizeof(char) * (pchEnd - pchStart + 1));
	}
	HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
	{
		CTextFile tf;
		FILE *fp;       //Text file pointer
		char row[500];  //row buffer;
		*pcRowsAffected = 0;
		fp = fopen(
			GetFileName(), 
			"r+");	    //Open for reading and writing
		if (fp == NULL) {
			return DB_E_INVALID;
		}
		while (fgets(row, 500, fp)) {	//Go until EOF
			ColumnCopy(row, tf.strClass, 50);
			ColumnCopy(row+50, tf.strSectionID, 11);
			ColumnCopy(row+61, tf.strYear, 6);
			ColumnCopy(row+67, tf.strTerm, 30);
			ColumnCopy(row+97, tf.strInstructor, 50);
			ColumnCopy(row+147, tf.strAssignment, 255);
			ColumnCopy(row+402, tf.strScore, 22);
			ColumnCopy(row+424, tf.strStudent, 35);
			if (!m_rgRowData.Add(tf))
				return E_OUTOFMEMORY;
			*pcRowsAffected++;		
		}
		fclose(fp);
		return S_OK;
	}
};
#endif //__COLEDBTextProviderRowset_H_

⌨️ 快捷键说明

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