创建单文档 并添加数据源 ,创建项目流程参照单文档视图项目创建流程
具体的程序例子在 SDI + mysql 采用数据源模式的程序 请下载
【将记录集结果放在文档类中】
//.doc中
public:
CDataBase_13Set * GetSet()//这个是重点呢,很少这样子写
{
return &pSet;
}
private:
CDataBase_13Set pSet;//数据集对象
//在view中
public:
CDataBase_13Set *pSet;//作为公有的
//在view的初始化中
void CDataBase_13View::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//在初始化时把数据库打开
CDataBase_13Doc * pDoc = GetDocument();//获取文档对象指针
//CDataBase_13Set *pSet = pDoc->GetSet();//获取记录集对象指针//全局,不用每次都获取
pSet = pDoc->GetSet();//获取记录集对象指针//全局,不用每次都获取
if (false == pSet->IsOpen())//数据库没有打开
{
pSet->Open();
}
m_id = pSet->m_id;
m_name = pSet->m_name;
m_age = pSet->m_age;
m_score = pSet->m_score;
UpdateData(FALSE);
}
void CDataBase_13View::OnBnClickedButtonUp()//上一个
{
// TODO: 在此添加控件通知处理程序代码
//CDataBase_13Doc *pDoc = GetDocument();
//CDataBase_13Set *pSet = pDoc->GetSet();
pSet->MovePrev();
if (pSet->IsBOF())//如果是开始的前一个
{
pSet->MoveLast();
}
//pSet->Requery();//这个不对,不能有哦
m_id = pSet->m_id;
m_name = pSet->m_name;
m_age = pSet->m_age;
m_score = pSet->m_score;
UpdateData(FALSE);//初始化控件
}
void CDataBase_13View::OnBnClickedButtonDown()//下一个
{
// TODO: 在此添加控件通知处理程序代码
pSet->MoveNext();
if (pSet->IsEOF())
{
pSet->MoveFirst();
}
m_id = pSet->m_id;
m_name = pSet->m_name;
m_age = pSet->m_age;
m_score = pSet->m_score;
UpdateData(FALSE);
}
void CDataBase_13View::OnBnClickedButtonAdd()//添加记录
{
// TODO: 在此添加控件通知处理程序代码
pSet->AddNew();
UpdateData(TRUE);//控件中内容更新到变量中
pSet->m_id = m_id;
pSet->m_name = m_name;
pSet->m_age = m_age;
pSet->m_score = m_score;
//
if (pSet->CanUpdate())
{
pSet->Update();
}
pSet->Requery();//点击上一个,下一个时,重新查询,记录集的结果会更新的,
}
void CDataBase_13View::OnBnClickedButtonUpdate()//修改
{
// TODO: 在此添加控件通知处理程序代码
pSet->Edit();
UpdateData(TRUE);
pSet->m_id = m_id;
pSet->m_name = m_name;
pSet->m_age = m_age;
pSet->m_score = m_score;
//
if (pSet->CanUpdate())
{
pSet->Update();
}
pSet->Requery();//点击上一个,下一个时,重新查询,记录集的结果会更新的,
}
void CDataBase_13View::OnBnClickedButtonDelete()//删除
{
// TODO: 在此添加控件通知处理程序代码
pSet->Delete();
pSet->Requery();//重新查询,更新记录集中内容
}
void CDataBase_13View::OnBnClickedButtonAgerange()//过滤//
{
// TODO: 在此添加控件通知处理程序代码
//设置过滤条件
pSet->m_strFilter.Format(_T("age > 18"));
//重新查询 获得新的数据集
pSet->Requery();
//给第一个初始化,点击下一个时就对啦
//如果没有下面,则点击下一个时 第一个是没有显示的,此处应该先给初始化的
m_id = pSet->m_id;
m_name = pSet->m_name;
m_age = pSet->m_age;
m_score = pSet->m_score;
UpdateData(FALSE);
}
void CDataBase_13View::OnBnClickedButtonSort()//降序
{
// TODO: 在此添加控件通知处理程序代码
//默认升序
//pSet->m_strSort.Format(_T("age"));//升序
pSet->m_strSort.Format(_T("age desc"));//降序
pSet->Requery();
//如果没有下面,则点击下一个时 第一个是没有显示的,此处应该先给初始化的
m_id = pSet->m_id;
m_name = pSet->m_name;
m_age = pSet->m_age;
m_score = pSet->m_score;
UpdateData(FALSE);
}
【总结】该方法用了class CDataBase_13Set : public CRecordset
CDataBase_13Set *pSet;//作为公有的 该记录集的操作很简单,傻瓜式的操作,对数据库的理解就不是很深刻了,所以,还是用API和ADO模式类练习。