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

📄 dataset.h

📁 1)动态加载中间(2)规范化中间层接口 (3)解释本地文件系统(4)基于数据库的数据提供(5)数据库设计(6)优化数据提供逻辑(7)程序框架结构图
💻 H
字号:
// DataSet.h : interface of the CDataSet class
//
/////////////////////////////////////////////////////////////////////////////

#pragma once

void SetStatus(const CString Msg);

///////////////////////////////////////////////////////////////////////// CMyException
class CMyException: public CException {
	CString m_ErrorMsg;
public:
	CMyException(int ResourceID);
	CMyException(CString ErrorMsg);
	BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError, PUINT pnHelpContext = NULL);
};

///////////////////////////////////////////////////////////////////////
// CDataSet
template<class T, int M> class CDataSet : public CRecordset
{
public:
	CDataSet(LPCSTR Table, CDatabase* pdb);
	T				m_Data;				// Attached object
	CString			m_DefaultSQL;		// Default SQL SELECT statement
	CString			m_DefaultSort;		// Default SQL ORDER BY clause
	CString			m_DefaultFilter;	// Default SQL WHERE clause

// Operations
public:
	virtual BOOL Search(LPCSTR Filter, LPCSTR Sort = NULL, BOOL bFail = FALSE);
	virtual BOOL DirectSearch(LPCSTR Filter, LPCSTR Sort = NULL, BOOL bFail = FALSE);
	virtual void LoadAll(CArray<T, T>& A, int N = 0);
	virtual void SaveAll(CArray<T, T>& A);
	virtual void Load(T& Data) { Data = m_Data; }
	virtual void Store(T& Data);
	virtual void Close();

// Implementation
protected:
	virtual CString GetDefaultSQL() { return m_DefaultSQL; }
	virtual void DoFieldExchange(CFieldExchange* pFX);
};

///////////////////////////////////////////////////////////////////////
// CDataSet
template<class T, int M> CDataSet<T, M>::CDataSet(LPCSTR Table, CDatabase* pdb) :
	CRecordset(pdb)
{
	m_nFields = M;
	m_DefaultSQL = Table;
	m_DefaultFilter = "%s";
}

template<class T, int M> BOOL CDataSet<T, M>::Search(LPCSTR Filter, LPCSTR Sort, BOOL bFail)
{
	if ( IsOpen() ) Close();

	SetStatus("Opening " + m_DefaultSQL + " ...");

	if ( Filter )
		m_strFilter.Format(m_DefaultFilter, Filter);
	else
		m_strFilter = "";
	m_strSort = Sort;

	Open();

	// Throw exception if record not found
	if ( bFail && IsEOF() )
		THROW(new CMyException(m_DefaultSQL + " record not found!"));
	return !IsEOF();
}

template<class T, int M> BOOL CDataSet<T, M>::DirectSearch(LPCSTR Filter, LPCSTR Sort, BOOL bFail)
{
	if ( IsOpen() ) Close();

	SetStatus("Opening " + m_DefaultSQL + " ...");

	m_strFilter = Filter;
	m_strSort = Sort;
	Open();
	
	// Throw exception if record not found
	if ( bFail && IsEOF() )
		THROW(new CMyException(m_DefaultSQL + " record not found!"));
	return !IsEOF();
}

template<class T, int M> void CDataSet<T, M>::LoadAll(CArray<T, T>& A, int N)
{
	SetStatus("Loading " + m_DefaultSQL + " ...");
	A.RemoveAll();
		
	while ( !IsEOF() && (N == 0 || A.GetSize() < N) )
	{
		A.Add(m_Data);
		MoveNext();
	}  
}

template<class T, int M> void CDataSet<T, M>::SaveAll(CArray<T, T>& A)
{
	SetStatus("Writing " + m_DefaultSQL + " ...");
		
	for ( int i = 0; i < A.GetSize(); i++ )
	{
		AddNew();
		Store(A[i]);
	}  
}

template<class T, int M> void CDataSet<T, M>::Store(T& Data)
{
	SetStatus("Updating " + m_DefaultSQL + " ...");
	Edit();
	m_Data = Data;
	Update();
}

template<class T, int M> void CDataSet<T, M>::Close()
{
	CRecordset::Close();
	SetStatus("Ready");
}

⌨️ 快捷键说明

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