SDI + mysql + 添加 数据源模式 程序示例

创建单文档 并添加数据源 ,创建项目流程参照单文档视图项目创建流程

具体的程序例子在 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模式类练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值