📄 dataset.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 + -