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

来源:互联网 发布:网络贩毒暗语 编辑:程序博客网 时间:2024/04/27 23:07

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