




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC中利用ADO共同实现数据库的操作 ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是ADO的主要优势。ADO是一套用自动化技术建立起来的对象层次结构,它比其他的一些对象模型如DAO(Data Access Object)、RDO(Remote Data Object)等具有更好的灵活性,使用更为方便,并且访问数据的效率更高。SQL是强大的数据库操作系统,通过ADO和SQL语句的配合,我们可以的实现对数据库的一系列操作,例如创建数据库、创建表、创建索引,实现数据库的多重查询、高级查询和数据的汇总等技术。下面通过例程介绍如何通过ADO和SQL语句的配合实现对数据库的操作。 第一步:通过Access创建数据库test.mdb。 第二步:创建单文档工程testado,所有的选项都取默认值。 第三步:COM库的初始化 我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp:InitInstance()的重载函数中完成,请看如下代码: BOOL CADOTest1App:InitInstance() AfxOleInit(); . 第四步:用#import指令引入ADO类型库 我们在stdafx.h中加入如下语句: #import c:program filescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF) 这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C+头文件来定义ADO库。 第五步:在testadoview.h中定义一个指向Connection对象的指针:_ConnectionPtr _pConnection; 第六步:添加如下代码: void CTestadoView:OnInitialUpdate() CView:OnInitialUpdate(); HRESULT hr; try hr = m_pConnection.CreateInstance(ADODB.Connection);/创建Connection对象 if(SUCCEEDED(hr) hr = m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb,adModeUnknown); /连接数据库 /上面一句中连接字串中的Provider是针对ACCESS2000环境的 catch(_com_error e)/捕捉异常 CString errormessage; errormessage.Format(连接数据库失败!rn错误信息:%s,e.ErrorMessage(); AfxMessageBox(errormessage);/显示错误信息 第七步:在析构函数中关闭Connection对象并将其释放,代码如下: CTestadoView:CTestadoView() m_pConnection-Close(); m_pConnection.Release(); 第八步:添加菜单项创建数据库表,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddtable() _variant_t RecordsAffected; m_pConnection-Execute(CREATE TABLE new(ID INTEGER,username TEXT,old INTEGER),&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加表,我们可以发现数据库中已经添加了一个表new,其中的字段有我们定义的字段。 第九步:添加菜单项删除数据库表,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnDeleteTable() _variant_t RecordsAffected; m_pConnection-Execute(DROP TABLE new,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令删除表,我们可以发现数据库中刚才添加的表new已被删除。 第十步:添加菜单项添加一列,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddColumn() _variant_t RecordsAffected; m_pConnection-Execute(ALTER TABLE new ADD newcolumn1 INTEGER, &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加一列,我们可以发现数据库中刚才添加的表new中已添加了一个新列。 第十一步:添加菜单项删除一列,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddColumn() _variant_t RecordsAffected; m_pConnection-Execute(ALTER TABLE new ADD newcolumn1 INTEGER, &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令删除一列,我们可以发现数据库中刚才添加的表new中的新列已被删除。 第十二步:添加菜单项添加记录,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddRecord() _variant_t RecordsAffected; for(int i = 1;i Execute(_bstr_t)strSQL,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加记录,我们可以发现数据库中刚才添加的表new中添加了九条新的记录。 第十三步:添加菜单项old字段加1,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnOldAddone() _variant_t RecordsAffected; m_pConnection-Execute(UPDATE new SET old = old+1,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令old记录加1,我们可以发现数据库中刚才添加的表new中的九条新的记录的old字段都自动加1。 第十四步:添加菜单项统计记录数目,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnTotalRecords() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(SELECT COUNT(*) FROM new where ID 0, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 CString Message; Message.Format(共有%d条记录,vCount.lVal); AfxMessageBox(Message);/显示当前记录条数 运行程序,执行菜单当中的命令统计记录数目,我们可以得到数据库中记录的数目。 第十五步:添加菜单项设置ID为索引,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnSetIdIndex() _variant_t RecordsAffected; m_pConnection-Execute(CREATE UNIQUE INDEX id ON new(ID), &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令设置ID为索引,我们可以发现数据库中ID被设置为索引。 第十六步:添加菜单项数据汇总、old字段的总和、old字段的均值、old的最小值、old字段的最大值,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnOldMax() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select MAX(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 m_pRecordset.Release(); CString Message; Message.Format(最大值是%d,vCount.lVal); AfxMessageBox(Message); void CTestadoView:OnOldMin() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select MIN(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 m_pRecordset.Release(); CString Message; Message.Format(最小值是%d,vCount.lVal); AfxMessageBox(Message); void CTestadoView:OnOldTotal() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select SUM(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 m_pRecordset.Release(); CString Message; Message.Format(总和是%d,(long)vCount); AfxMessageBox(Message); void CTestadoView:OnOldAverage() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select AVG(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 m_pRecordset.Release(); CString Message; Message.Format(平均值是%d,(long)vCount); AfxMessageBox(Message); 运行程序,执行菜单当中的汇总命令,我们可以得到相关的汇总信息。 AfxOleInit(); . 第四步:用#import指令引入ADO类型库 我们在stdafx.h中加入如下语句:#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF,adoEOF) 这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C+头文件来定义ADO库。 第五步:在testadoview.h中定义一个指向Connection对象的指针:_ConnectionPtr _pConnection; 第六步:添加如下代码: void CTestadoView:OnInitialUpdate() CView:OnInitialUpdate(); HRESULT hr; try hr = m_pConnection.CreateInstance(ADODB.Connection);/创建Connection对象 if(SUCCEEDED(hr) hr = m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb, ,adModeUnknown);/连接数据库 /上面一句中连接字串中的Provider是针对ACCESS2000环境的 catch(_com_error e)/捕捉异常 CString errormessage; errormessage.Format(连接数据库失败!rn错误信息:%s,e.ErrorMessage(); AfxMessageBox(errormessage);/显示错误信息 第七步:在析构函数中关闭Connection对象并将其释放,代码如下: CTestadoView:CTestadoView() m_pConnection-Close(); m_pConnection.Release(); 第八步:添加菜单项创建数据库表,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddtable() _variant_t RecordsAffected; m_pConnection-Execute(CREATE TABLE new(ID INTEGER,username TEXT,old INTEGER),&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加表,我们可以发现数据库中已经添加了一个表new,其中的字段有我们定义的字段。 第九步:添加菜单项删除数据库表,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnDeleteTable() _variant_t RecordsAffected; m_pConnection-Execute(DROP TABLE new,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令删除表,我们可以发现数据库中刚才添加的表new已被删除。第十步:添加菜单项添加一列,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddColumn() _variant_t RecordsAffected; m_pConnection-Execute(ALTER TABLE new ADD newcolumn1 INTEGER, &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加一列,我们可以发现数据库中刚才添加的表new中已添加了一个新列。 第十一步:添加菜单项删除一列,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddColumn() _variant_t RecordsAffected; m_pConnection-Execute(ALTER TABLE new ADD newcolumn1 INTEGER, &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令删除一列,我们可以发现数据库中刚才添加的表new中的新列已被删除。 第十二步:添加菜单项添加记录,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnAddRecord() _variant_t RecordsAffected; for(int i = 1;i Execute(_bstr_t)strSQL,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令添加记录,我们可以发现数据库中刚才添加的表new中添加了九条新的记录。 第十三步:添加菜单项old字段加1,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnOldAddone() _variant_t RecordsAffected; m_pConnection-Execute(UPDATE new SET old = old+1,&RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令old记录加1,我们可以发现数据库中刚才添加的表new中的九条新的记录的old字段都自动加1。 第十四步:添加菜单项统计记录数目,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnTotalRecords() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(SELECT COUNT(*) FROM new where ID 0, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 CString Message; Message.Format(共有%d条记录,vCount.lVal); AfxMessageBox(Message);/显示当前记录条数 运行程序,执行菜单当中的命令统计记录数目,我们可以得到数据库中记录的数目。 第十五步:添加菜单项设置ID为索引,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnSetIdIndex() _variant_t RecordsAffected; m_pConnection-Execute(CREATE UNIQUE INDEX id ON new(ID), &RecordsAffected,adCmdText); 运行程序,执行菜单当中的命令设置ID为索引,我们可以发现数据库中ID被设置为索引。 第十六步:添加菜单项数据汇总、old字段的总和、old字段的均值、old的最小值、old字段的最大值,并添加相应的消息处理函数,然后添加代码如下: void CTestadoView:OnOldMax() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select MAX(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量 m_pRecordset-Close();/关闭记录集 m_pRecordset.Release(); CString Message; Message.Format(最大值是%d,vCount.lVal); AfxMessageBox(Message); void CTestadoView:OnOldMin() _RecordsetPtr m_pRecordset; _variant_t RecordsAffected; m_pRecordset =m_pConnection-Execute(select MIN(old) from new, &RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子空间的正交补空间课件
- 新能源汽车动力蓄电池与充电系统(微课版) 课件 任务2.1新能源汽车动力电池认知与更换
- 平面设计师课件
- 平面图行的旋转课件
- 平面向量课件
- 工业安全培训感想课件
- FLT3-IN-32-hydrochloride-生命科学试剂-MCE
- 2025年吉林公务员真题
- 2024年黄冈市市直机关遴选公务员笔试真题
- 央视地震逃生安全培训课件
- 2025年湖北武汉理工大学管理人员招聘笔试模拟试题及参考答案详解
- 第4课 科技力量大 第三课时(课件)2025-2026学年道德与法治三年级上册统编版
- 异常处理管理办法
- 2025年东风校招测评题库及答案
- 怎样合理减肥健康教育
- 音乐核心素养培训课件
- 企业营销管理培训课件
- 蘑菇中毒中医处理
- 重庆机电职业技术大学《高等数学Ⅱ》2025-2026学年期末试卷(A卷)
- 有奖竞猜题目及答案有趣
- 骨科引流管护理
评论
0/150
提交评论