关闭

使用ADO对象进行数据库开发实例

281人阅读 评论(0) 收藏 举报

1、 创建一个MFC对话框工程AdoObject,并设计如下对话框界面。

2、关联变量:

3、在stdafx.h引入ADO库定义文件,包含头文件。

#prgama warning (disable : 4146)
#include "icrsint.h"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
	 no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")

4、在AdoObject.cpp中,初始化COM

BOOL AdoObjectApp::InitInstance()
{
	::CoInitialize(NULL);
    /*if(!AfxOleInit())
	{
		AfxMessageBox("COM Error!");
		return FALSE;
	}*/
	AfxEnableControlContainer();
	//......
}

5、为对话框类添加成员:

_ConnectionPtr  m_pConnection;		//数据库连接指针(对象)
	_RecordsetPtr   m_pRecordSet;		//记录集指针(对象)
	_variant_t      vFieldValue;		//字段对应的记录值
	CString        strFieldValue;		//字段对应的记录值
	void 		  DisplayFields();		//显示记录到绑定的对话框控件上

6、在对话框类的OnInitDialog中添加如下代码,实现数据库连接:

// 数据库连接
	m_pConnection.CreateInstance(_uuidof(Connection));
	m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = student.mdb;","","",-1);
	
	// 打开数据库记录
	m_pRecordSet.CreateInstance(_uuidof(Recordset));
	m_pRecordSet->Open("select * from stu_info",m_pConnection.GetInterfacePtr(), 
			adOpenDynamic, adLockOptimistic, adCmdText);

	// 移动游标到打开的第一条数据库记录
	m_pRecordSet->MoveFirst(); 
	DisplayFields();	//显示表中的记录信息

7、添加对话框成员函数DisplayFields:负责显示对应表中的记录信息。

void CAdoObjectDlg::DisplayFields()
{
	vFieldValue= m_pRecordSet->GetCollect("学号");
	strFieldValue = (char*)_bstr_t(vFieldValue);
	m_sNo = strFieldValue;
	vFieldValue.Clear();

	vFieldValue= m_pRecordSet->GetCollect("姓名");
	strFieldValue=(char*)_bstr_t(vFieldValue);
	m_sName = strFieldValue;
	vFieldValue.Clear();

	vFieldValue= m_pRecordSet->GetCollect("出生日期");
	strFieldValue=(char*)_bstr_t(vFieldValue);
	m_sBirthday = strFieldValue;
	vFieldValue.Clear();

	vFieldValue= m_pRecordSet->GetCollect("地址");
	strFieldValue=(char*)_bstr_t(vFieldValue);
	m_sAddress = strFieldValue;
	vFieldValue.Clear();

	vFieldValue= m_pRecordSet->GetCollect("四级成绩");
	strFieldValue=(char*)_bstr_t(vFieldValue);
	m_sEnglish = strFieldValue;
	vFieldValue.Clear();

	vFieldValue= m_pRecordSet->GetCollect("VC成绩");
	strFieldValue=(char*)_bstr_t(vFieldValue);
	m_sVC = strFieldValue;
	vFieldValue.Clear();

	UpdateData(FALSE);
}

8、按钮响应函数

void CAdoTestDlg::OnButton1() // 向后
{
	// TODO: Add your control notification handler code here
	m_pRecordSet->MoveNext();
	if(m_pRecordSet->EndOfFile==VARIANT_FALSE)
		DisplayFields();
	else
	{
		m_pRecordSet->MovePrevious();
		AfxMessageBox("已经到最后一条记录!");
	}
}
void CAdoTestDlg::OnButton2() // 向前
{
	m_pRecordSet->MovePrevious();
	if(m_pRecordSet->FirstOfFile==VARIANT_FALSE)
		DisplayFields();
	else
	{
		m_pRecordSet->MoveNext();
		AfxMessageBox("已经到第一条记录!");
	}	
}

void CAdoTestDlg::OnButton3() //添加
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_pRecordSet->AddNew();
	m_pRecordSet->PutCollect("学号",_variant_t(m_Sno));
	m_pRecordSet->PutCollect("姓名",_variant_t(m_Name));
	m_pRecordSet->PutCollect("出生日期",_variant_t(m_birthday));
	m_pRecordSet->PutCollect("四级成绩",_variant_t(m_EnglishGrade));
	m_pRecordSet->PutCollect("VC成绩",_variant_t(m_ComputerGrade));
	m_pRecordSet->Update();	//存入数据库

	m_sNo = " ";
	m_sName= " ";
	m_sBirthday = " ";
	m_sEnglish = " ";
	m_sVC = " ";
	UpdateData(FALSE);
}
void CAdoTestDlg::OnButton4() 
{
	// TODO: Add your control notification handler code here.;
	m_pRecordSet->Delete(adAffectCurrent);
	m_Sno = " ";
	m_Name= " ";
	m_birthday = " ";
	m_EnglishGrade = " ";
	m_ComputerGrade = " ";
	UpdateData(FALSE);
}

9、程序运行结果如下:



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:126189次
    • 积分:3613
    • 等级:
    • 排名:第9043名
    • 原创:256篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    文章均来自以下教程网
    文章分类
    文章存档
    最新评论