VC++对Access数据库的操作(查询、插入、更新、删除等)
Microsoft Office Access是由微软发布的关系数据库管理系统。Access数据库常应用于小型软件系统中,比如:生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:简单易学、使用灵活。
下面我们结合实例来详细说明,在VC++ MFC中,如何使用Access数据库文件进行数据的存储,如何实现对数据库中数据的查询、插入、更新和删除等操作。
(实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/8235865)
首先,怎样创建一个可供VC++ MFC程序使用的Access数据库,并在该数据库中创建数据表呢?
第一步:打开Microsoft Office Access软件,点击“空白数据库”;
第二步:设置预创建空白数据库的文件名和文件类型(文件名:point32.mdb,文件类型:Microsoft Office Access 2000 数据库(*.mdb));
第三步:“创建”空白数据库;
第四步:为该数据库“设置数据库密码”(本例中密码设置为:1234);
第五步:在该数据库中创建一张表,例如:TestTab(编号,姓名,性别,年龄);
第六步:表创建完成后,保存并关闭数据库,然后将该数据库文件(point32.mdb)剪切到你的VC++程序debug或release目录中,则准备工作完成。
其次,在VC++ MFC中编写对该数据库中TestTab表进行数据查询、插入、更新、删除等操作的方法:
(1)导入才用ado方式访问Access数据库所需的DLL
#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")//ado访问ACCESS数据库必需
(2)在程序的入口函数中,初始化OLE以支持应用程序
AfxOleInit();
(3)获取应用程序(EXE)所在路径
CString path;//应用程序所在路径
char filepath[256];
char* pPath;
GetModuleFileName(AfxGetInstanceHandle(),filepath,256);
pPath = strrchr(filepath,'\\');
*pPath = 0;
path = filepath;
(4)创建数据库访问连接字符串
char* PtConnectStr;//数据库连接字符串
CString connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
connstr += path;
connstr += "\\point32.mdb";
connstr += ";Jet OLEDB:Database Password='1234'";
PtConnectStr = connstr.GetBuffer(0);
(5)查询TestTab表中数据方法实现
//查询表中数据,并显示在List Control控件中
void CPoint32Dlg::ReadUserInfo()
{//selectm_list.DeleteAllItems();//清空列表_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;try{m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open(PtConnectStr,"","",adModeUnknown);}catch(_com_error e){CString errormessage;errormessage.Format("数据库连接失败.\r错误信息:%s",e.ErrorMessage());//AfxMessageBox(errormessage);MessageBox(errormessage,"连接失败",MB_ICONEXCLAMATION);if(m_pConnection->State)m_pConnection->Close();return;}try{//获取数据,放在数据集中CString cmd;cmd.Format("SELECT * FROM TestTab");m_pRecordset.CreateInstance("ADODB.Recordset");m_pRecordset->Open(cmd.GetBuffer(),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);//处理数据,并显示_variant_t varbuffer;long index = 0;//注意:必须是long类型int countItem = 0;CString str;while(!m_pRecordset->adoEOF){index = 0;//读ID号varbuffer = m_pRecordset->GetCollect(_variant_t(index)); if(varbuffer.vt!=VT_NULL){str.Format("%d",varbuffer.lVal);m_list.InsertItem(countItem,str.GetBuffer());}//读其它的信息while(index < 3){index++;varbuffer = m_pRecordset->GetCollect(_variant_t(index));if(varbuffer.vt!=VT_NULL){str = (LPCTSTR)(_bstr_t)varbuffer;m_list.SetItemText(countItem,index,str.GetBuffer());}}m_pRecordset->MoveNext();countItem++;}}catch(_com_error &e){//AfxMessageBox(e.Description());MessageBox(e.Description(),"数据库操作失败.",MB_ICONEXCLAMATION);if(m_pRecordset->State)m_pRecordset->Close();if(m_pConnection->State)m_pConnection->Close();return;}if(m_pRecordset->State)m_pRecordset->Close();if(m_pConnection->State)m_pConnection->Close();
}
(6)向TestTab表中插入数据方法实现
//向表中插入数据,并更新List Control控件中显示的数据
void CPoint32Dlg::OnBnClickedButton1()
{//insert_ConnectionPtr m_pConnection;_variant_t RecordsAffected;try{m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open(PtConnectStr,"","",adModeUnknown);}catch(_com_error e){CString errormessage;errormessage.Format("数据库连接失败.\r错误信息:%s",e.ErrorMessage());MessageBox(errormessage," 添加失败 ",MB_ICONEXCLAMATION);return;}try{CString strCmd="INSERT INTO TestTab(UName,UGender,UAge) VALUES('测试者','男','30')";for(int i=0;i<5;i++){m_pConnection->Execute(strCmd.AllocSysString(),&RecordsAffected,adCmdText);}}catch(_com_error &e){//AfxMessageBox(e.Description());MessageBox(e.Description()," 添加失败 ",MB_ICONEXCLAMATION);if(m_pConnection->State)m_pConnection->Close();return;}if(m_pConnection->State)m_pConnection->Close();//MessageBox("添加成功!","消息");m_update.EnableWindow(TRUE);m_delete.EnableWindow(TRUE);ReadUserInfo();
}
(7)更新TestTab表中数据方法实现
//更新表中数据,并更新List Control控件的显示
void CPoint32Dlg::OnBnClickedButton3()
{// update_ConnectionPtr m_pConnection;_variant_t RecordsAffected;try{m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open(PtConnectStr,"","",adModeUnknown);}catch(_com_error e){CString errormessage;errormessage.Format("数据库连接失败.\r错误信息:%s",e.ErrorMessage());MessageBox(errormessage," 修改失败 ",MB_ICONEXCLAMATION);return;}try{CString strCmd="UPDATE TestTab SET [UGender]='女',[UAge]='20' WHERE [UName]='测试者'";m_pConnection->Execute(strCmd.AllocSysString(),&RecordsAffected,adCmdText);}catch(_com_error &e){//AfxMessageBox(e.Description());MessageBox(e.Description()," 修改失败 ",MB_ICONEXCLAMATION);if(m_pConnection->State)m_pConnection->Close();return;}if(m_pConnection->State)m_pConnection->Close();//MessageBox("修改成功!","消息");ReadUserInfo();
}
(8)删除TestTab表中数据及重置表中自动编号主键(key)方法现实
//删除表中数据、重置自动编号(从1开始),并更新List Control控件显示
void CPoint32Dlg::OnBnClickedButton4()
{// delete_ConnectionPtr m_pConnection;_variant_t RecordsAffected;try{m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open(PtConnectStr,"","",adModeUnknown);}catch(_com_error e){CString errormessage;errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());MessageBox(errormessage,"删除失败",MB_ICONEXCLAMATION);return;}try{//删除表中所有数据CString strCmd="DELETE FROM TestTab";m_pConnection->Execute(strCmd.AllocSysString(),&RecordsAffected,adCmdText);//重置表中自动编号ID,使其从1开始增加(必须先删除表中所有数据)strCmd="ALTER TABLE TestTab ALTER COLUMN ID COUNTER(1,1)";m_pConnection->Execute(strCmd.AllocSysString(),&RecordsAffected,adCmdText);}catch(_com_error &e){//AfxMessageBox(e.Description());MessageBox(e.Description(),"删除失败",MB_ICONEXCLAMATION);if(m_pConnection->State)m_pConnection->Close();return;}if(m_pConnection->State)m_pConnection->Close();//MessageBox("删除成功!","完成");m_insert.EnableWindow(TRUE);m_update.EnableWindow(FALSE);m_delete.EnableWindow(FALSE);ReadUserInfo();
}
VC++对Access数据库的操作(查询、插入、更新、删除等)相关推荐
- ACCESS数据库C#操作类(SQLHELPER修改版)——转自网上
ACCESS数据库C#操作类(SQLHELPER修改版) 这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所 ...
- mfc搜索新建access字段_MFC ODBC类 Access数据库的操作
MFC ODBC类 Access数据库的操作 2008年11月17日 新建一个Access数据库,数据库名是data.mdb新建一个表Ttest,两个字段ID,name 表内容如下 ID name 1 ...
- Access数据库 实现分页查询
Access数据库 实现分页查询 目录 说明 项目的结构 SQL语句 Servlet:page.java 显示页面query.jsp 访问页面hello.jsp 总结 目录 说明 项目环境:Eclip ...
- access查询mysql_2017计算机二级Access数据库生成表查询教程
2017计算机二级Access数据库生成表查询教程 引导语;你知道运用Access数据库如何查询生成表吗,以下是百分网小编分享给大家的2017计算机二级Access数据库生成表查询教程,欢迎阅读! 生 ...
- ACCESS数据库的压缩,备份,还原,下载,删除的实现
以文本方式查看主题 - 企胜MIS开发论坛|ASP.NET|UML| CSS|Access|My SQL|网络营销|JAVA|J2EE|Ajax (http://www.fleake.com/in ...
- access数据库出现操作必须使用一个可更新的查询的解决办法
查看相应数据库文件,发现ACCESS数据库文件只有读权限,没有写和修改的权限,所以对于update.delete等的操作无法正确完成. 解决办法: 在IIS中修改mdb文件的权限,针对user用户(以 ...
- 使用VC连接Access数据库的两种方法
以前的时候用VC写了两种连接Access数据库的方法,为了方便以后查找把这两种方法做一下简单的介绍.Windows平台的数据接口标准有ODBC.OLE DB.ADO和Borland的BDE接口,ODB ...
- python不可以操作access数据库_Python操作Access数据库基本操作步骤分析
Python编程语言的出现,带给开发人员非常大的好处.我们可以利用这样一款功能强大的面向对象开源语言来轻松的实现许多特定功能需求.比如Python操作Access数据库的功能实现等等.在Python操 ...
- java连接access2013数据库_滴水穿石–Java连接Access数据库及其操作
1.配置数据源 [控制面板]->[管理工具]->[数据源ODBC] 点击添加选择Microsoft Access Driver 填写数据源名(自定义,如test),并选择数据库(指定你的A ...
最新文章
- macos 全局快捷键 打开 iterm_MouseInc – 完全免费的全局鼠标手势增强工具 | 马小帮...
- 面试大法——算法、Python、机器学习等笔试面经资源|干货收藏
- 学习笔记《Java多线程编程实战指南》四
- java sql sum函数的使用方法,Springboot jpa使用sum()函数返回结果如何接收
- 大学计算机演示文稿作业,(大学计算机作业.doc
- 全球及中国香蕉连接器行业投资商机与前景趋势展望报告2022版
- 多媒体开发之wis-stream
- NYOJ-----最少乘法次数
- 校园推广方案:常用手段及百试不爽的方法
- FFA 2021 专场解读 - 生产实践 / 机器学习
- 关于配置文件的几点常识
- 计算机考试准考证无法下载
- 【通信系统信道估计】
- (转)爆款游戏推动硬件普及,5G 促进 VR 产业规模化运用
- Windows系统怎么查看电脑的系统位数?
- 简单点教你python文件处理
- tao的开源代码_获取并编译TAO
- Notes Twenty-third days-渗透攻击-红队-红队自研
- 与 AI 博弈:从 AlphaGo 到 MuZero(三)
- 【TP5.1】树状导航栏(无极限分类)