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、程序运行结果如下: