CSDN博客

img haiheng

DAO的使用

发表于2004/10/20 9:30:00  949人阅读

分类: [舞空术]DataBase修炼中...

下面我们来完成CdataSet类。具体的见下面的代码,有详细的注释:

// DataSet.h : header file
/////////////////////////////////////////////////////////////////////////////
// CDataSet DAO recordset
//这是CDataSet的头文件。Wizard已经为我们做了很多的工作。
//我们需要主要看看RFX机制
class CDataSet : public CDaoRecordset 
{
public:
	virtual  ~CDataSet();
	CDataSet(CDaoDatabase* pDatabase = NULL);
	DECLARE_DYNAMIC(CDataSet)

// Field/Param Data
	//{{AFX_FIELD(CDataSet, CDaoRecordset)
	long	m_ID;
	CString	m_Name;
	CString	m_Sex;
	COleDateTime	m_BirthDay;
	CString	m_Region;
	CString	m_Address;
	CString	m_Mail;
	CString	m_HomePage;
	CString	m_Resume;
	CString	m_Sort;
	//}}AFX_FIELD
//上面是由Wizard为我们建立的字段映射
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDataSet)
	public:
	virtual CString GetDefaultDBName();		// Default database name
	virtual CString GetDefaultSQL();		// Default SQL for Recordset
	virtual void DoFieldExchange(CDaoFieldExchange* pFX);  
              // 上面重载了DoFieldExchange 函数以便能够获得RFX 支持
	//}}AFX_VIRTUAL

// Implementation
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif
};

//下面是DataSet类的实现文件
// DataSet.cpp : implementation file
#include "stdafx.h"
#include "AddressBook.h"
#include "DataSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDataSet
IMPLEMENT_DYNAMIC(CDataSet, CDaoRecordset)

CDataSet::CDataSet(CDaoDatabase* pdb)
	: CDaoRecordset(pdb)//手工添加
{
	//{{AFX_FIELD_INIT(CDataSet)
	m_ID = 0;
	m_Name = _T("");
	m_Sex = _T("");
	m_BirthDay = (DATE)0;
	m_Region = _T("");
	m_Address = _T("");
	m_Mail = _T("");
	m_HomePage = _T("");
	m_Resume = _T("");
	m_Sort = _T("");
	m_nFields = 10;  //代表字段的数量。
	//}}AFX_FIELD_INIT
	m_nDefaultType = dbOpenDynaset;
}

///获得默认数据库的名称
///当默认数据库不在指定的路径下时调用通用文件对话框
CString CDataSet::GetDefaultDBName()
{
	CFileDialog flDlg( TRUE,_T("mdb"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		_T("Microsoft Access Database(*.mdb)|*.mdb|") );
	CString strTitle;
	strTitle.LoadString(IDS_FILEDIALOG_TITLE); //这个是在string table资源设定的对话狂标题
	flDlg.m_ofn.lpstrTitle=strTitle;
		
	if(flDlg.DoModal()==IDOK)
	{
		return _T(flDlg.GetPathName());
	}
	else
		return _T("C://addressbook.mdb");
}


///获得缺省的记录集
CString CDataSet::GetDefaultSQL()
{
	return _T("[FRIENDINFO]");
}

///这是DFX的中枢DoFieldExchange函数,它被重载了。
///它实现了数据源《----》记录集之间的双向数据交换
///大家应该仔细的看看MSDN对它的说明
void CDataSet::DoFieldExchange(CDaoFieldExchange* pFX)
{
	//{{AFX_FIELD_MAP(CDataSet)
	pFX->SetFieldType(CDaoFieldExchange::outputColumn);
	DFX_Long(pFX, _T("[编号]"), m_ID);
	DFX_Text(pFX, _T("[名称]"), m_Name);
	DFX_Text(pFX, _T("[性别]"), m_Sex);
	DFX_DateTime(pFX, _T("[生日]"), m_BirthDay);
	DFX_Text(pFX, _T("[地区]"), m_Region);
	DFX_Text(pFX, _T("[地址]"), m_Address);
	DFX_Text(pFX, _T("[邮件]"), m_Mail);
	DFX_Text(pFX, _T("[主页]"), m_HomePage);
	DFX_Text(pFX, _T("[简介]"), m_Resume);
	DFX_Text(pFX, _T("[简称]"), m_Sort);
	//}}AFX_FIELD_MAP
}
//上面便是DFX机制,它的作用是会在VC++数据类型和SQL数据类形之间进行一个映射,
//大家可以参看文档中的一个表。

/////////////////////////////////////////////////////////////////////////////
// CDataSet diagnostics

#ifdef _DEBUG
void CDataSet::AssertValid() const
{
	CDaoRecordset::AssertValid();
}

void CDataSet::Dump(CDumpContext& dc) const
{
	CDaoRecordset::Dump(dc);
}
#endif //_DEBUG

CDataSet::~CDataSet()
{
}

    
11、 好了,上面是CdataSet类的全部代码。下面一个重头是视图的代码。让我也把它的头文件贴出来,大家看看。
    
#include "DataSet.h"	// Added by ClassView这个是WIZARD干的
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CABView : public CListView
{
protected: // create from serialization only
	CABView();
	DECLARE_DYNCREATE(CABView)
// Attributes
public:
	CABDoc* GetDocument();
// Operations
public:
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CABView)
	public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	protected:
	virtual void OnInitialUpdate(); // called first time after construct
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
	//}}AFX_VIRTUAL

// Implementation
public:
	void Sort(BOOL isAsc); //排序函数
	void ShowTableData();//填充并显示记录集函数
	virtual ~CABView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CABView)
	afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult);  //选择列头单击
	afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);  //双击一条记录
	afx_msg void OnButtonAdd();  //增加新记录
	afx_msg void OnButtonAll();   //显示所有
	afx_msg void OnButtonDel();  //删除当前记录
	afx_msg void OnButtonEdit();  //编辑当前记录
	afx_msg void OnButtonFaind();  //查询记录
	afx_msg void OnButtonHelp();   //帮助
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	CDataSet *m_pSet;
	BOOL m_bIsShowAll;  //是否显示全部记录
	BOOL m_bIsAsc;  //是否排序

};

#ifndef _DEBUG  // debug version in ABView.cpp
inline CABDoc* CABView::GetDocument()
   { return (CABDoc*)m_pDocument; }
#endif
阅读全文
0 0

相关文章推荐

img
取 消
img