介绍一个增强的数据库类CDataSet
2008-02-26 20:26:33 来源:WEB开发网CMyException是一个简单的异常处理类,如果运行出错,通过这个类来丢出异常,并显示指定的错误信息。以下使这个类的定义和实现:
class CMyException: public CException {
CString m_ErrorMsg;
public:
CMyException(int ErrMsgResourceID);
CMyException(CString ErrMsg);
BOOL GetErrorMessage(LPTSTR lpszError,?
UINT nMaxError,
PUINT pnHelpContext = NULL);
};
CMyException::CMyException(int ResourceID)
{
m_ErrorMsg.LoadString(ResourceID);
}
CMyException::CMyException(CString ErrorMsg)
{
m_ErrorMsg = ErrorMsg;
}
BOOL CMyException::GetErrorMessage(LPTSTR lpszError,
UINT nMaxError,
PUINT)
{
strncpy(lpszError, (LPCSTR)m_ErrorMsg, nMaxError);
return TRUE;
}
在使用CDataSet类的应用程序中,对象可以被实例化如下: CDataset<DataObj, 4> MySet("Table1", &db);
这里“Table1”是数据库表的名字,“&db”指向一个打开的数据库,在大多数情况下(尤其是当使用事务处理时),实例创建数据库对象并且在打开记录机之前从外部打开数据库。您是否注意到在Listing 2 的代码中有一件事情没有做?,对每一个数据类而言必须要单独实现DoFieldExchange()来建立一个数据对象成员和数据库字段之间的联接,Listing 3 中的代码告诉您如何为DataObj实现DoFieldExchange()。 数据对象的 DoFieldExchange() 方法
以下是使用CDataSet的一个例子:
void CDataSet<DataObj, 4>::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, "VAR1", m_Data.Var1);
RFX_Text(pFX, "VAR2", m_Data.Var2);
RFX_Int(pFX, "VAR3", m_Data.Var3);
RFX_Single(pFX, "VAR4", m_Data.Var4);
}CDatabase db;
CArray<DataObj, DataObj> A;
TRY {
db.Open("TEST");
// Create recordset object
CDataSet<DataObj, 4> MySet("Table1", &db);
// Set default filter to var1
MySet.m_DefaultFilter = "Var1 = ''%s''";
MySet.Open();
// Load all of the records
MySet.LoadAll(A);
// Find some record
if ( MySet.Search("Anything") )
{
DataObj B;
// Load, update, and store new record
MySet.Load(B);
B.Var1 = "Anything else?";
MySet.Store(B);
}
MySet.Close();
AfxMessageBox("Data is loaded!");
}
CATCH_ALL(e) {
e->ReportError();
}
END_CATCH_ALL
为了测试例子,要创建一个系统数据源“Test”(MS Access Driver),指向Test.mdb,运行DbTest.exe,在菜单中选择 Test =〉DataSet。
更多精彩
赞助商链接