万为清
一、引言
数据库在日常生活生产中大量使用,也出现了各种数据库管理系统如ACCESS、SQL SERVER、ORACLE等。但这些数据管理系统不能开发出适合人们应用的Windows应用程序。而VC能将关系数据库和OOP(面向对象)编程方法结合起来,做出具有强大的数据管理能力和灵活适用的应用程序。VC操纵数据库的常用方法有ODBC、DAO、ADO、OLE DB等几种方法,其中最适合教学和工程应用软件开发的是ADO的方法。ADO技术是基于OLE DB的访问技术,它继承了OLE DB的技术优点,并且将OLE DB的接口作了封装,定义了ADO对象,使程序开发得到简化。基于ADO技术的应用程序可以通过一致的接口来访问各种各样的数据,不需要关心数据存放位置,也不需要进行数据转移、复制、转换,在实现分布式数据库应用上有很大的优势。下面通过一个简易学生管理程序来叙述VC用ADO方式操纵Access数据库的方法,和开发数据库应用程序的基本过程。
二、程序实现代码及步骤
1、创建ACCESS数据库
在Access2000中创建一个数据库db1,并创建一个数据表stu,添加2个字段(xh,文本型,字段大小10)(xm,文本型,字段大小10)。输入几条记录用于读写测试。
2、创建基于对话框的应用程序
用APP Wizard创建一个基于对话框的应用程序Adodb2010。
3、引入ADO函数库
在Stdafx.h结尾处添加引入msado15.dll的语句。
#import " msado15.dll msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
4、在窗体上放置控件
在对话框上放置相应的各控件。
5、连接数据库和数据表
在初始化函数中连接数据库和数据表。
代码如下:
CString strname;
strname.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;","","",adModeUnknown);
AfxOleInit();
AfxEnableControlContainer();
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=strname;
m_pConnection->Open(strConnect,"","",adModeUnknown);
m_pRecordset.CreateInstance("ADODB.Recordset");
CString sql="SELECT * FROM stu";
m_pRecordset->Open((_variant_t)sql,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//
6、各个按钮的功能函数
1)
void CAdodb2010Dlg::OnButton1()
{
m_pRecordset->MoveNext();
if(m_pRecordset->adoEOF)
m_pRecordset->MoveFirst();
CString m;
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xh");
GetDlgItem(IDC_EDIT1)->SetWindowText(m);
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xm");
GetDlgItem(IDC_EDIT2)->SetWindowText(m);
}
2)
void CAdodb2010Dlg::OnButton2()
{
//点击“上一条记录”显示上一条记录
m_pRecordset->MovePrevious();
if(m_pRecordset->adoBOF)
m_pRecordset->MoveLast();
}
3)
void CAdodb2010Dlg::OnButton3()
{
sql.Format("select * from stu where xh='%s'",s1);
m_pRecordset->Open(_variant_t(sql),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
var = m_pRecordset->GetCollect("xm");
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xm");
GetDlgItem(IDC_EDIT2)->SetWindowText(m);
}
4)
void CAdodb2010Dlg::OnButton4()
{//点击“插入”,将当前编辑框中的学号和姓名插入到stu数据表中
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
CString sql,m1,m2;
GetDlgItem(IDC_EDIT1)->GetWindowText(m1);
GetDlgItem(IDC_EDIT2)->GetWindowText(m2);
sql.Format("Insert into stu (xh,xm) values ('%s','%s')",m1,m2);
_variant_t RecordsAffected;
m_pConnection->Execute((_bstr_t)sql,&RecordsAffected;,adCmdText);
}
5)
void CAdodb2010Dlg::OnButton5()
{
sql.Format("delete from stu where xh='%s'",m1);
_variant_t RecordsAffected;
m_pConnection->Execute((_bstr_t)sql,&RecordsAffected;,adCmdText);
}
7、最后点击VC编译器菜单中的Build下的Rebuild All,编译并生成应用程序,得到我们前面看到的效果图的应用程序。
三、结束语
本文通过一个简易学生管理程序介绍了VC++6.0用ADO技术操纵Access数据库具体方法,对数据库和数据表进行连接、查询、插入、删除、修改等操作。在实际工程软件开发项目中对以上应用程序略加修改,加上ListView表格控件就可以生成功能更完善的学生管理软件。也可以将连接ACCESS数据库的方法修改一下,连接SQL SERVER数据库,做成网络数据库应用软件。目前该方法已经在省电脑大赛训练教学和工程软件开发得到大量使用,取得了很好的效果。
参考文献:
[1]郑阿奇,Visual C++教程,机械工业出版社,2004
[2]黄庆生,精通VISUAL C++ 6.0,人民邮电出版社 ,1999年6月
[3]宋耀文,ADO开发技术在Visual C++中的实现,哈尔滨师范大学自然科学学报2003.5