VC下利用ADO访问Access数据库(Use ADO)
VC下利用ADO直接访问Access数据库步骤不需要用户建立ODBC数据源)
1.包含相关动态链接库
1 2 |
//在StdAfx.h中,最后部分添加(注意:一定要在最后部分,否则会编译出错) #import "c:&my;Program Files&my;Common Files&my;System&my;ado&my;msado15.dll" no_namespace rename("EOF","adoEOF") |
2.连接的创建与初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//相关成员变量 _ConnectionPtr m_conn; _RecordsetPtr m_res; //成员函数块(一般写在CDocment类构造函数即可) try { CoInitialize(NULL); m_conn.CreateInstance(_uuidof(Connection)); CString strFileName; strFileName = "MYBASE.mdb"; //添加相应你的数据库的文件名,编辑状态应放在源文件目录下 m_conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName, "","",adConnectUnspecified); //用户名,密码 m_res.CreateInstance(_uuidof(Recordset)); } catch(_com_error e) //异常检测 { AfxMessageBox("数据库连接错误!",MB_ICONEXCLAMATION); exit(0); //错误,程序退出 } |
3.数据库相关操作(操作方法很多,这里只提供一种简易操作)
假设数据库表设计如下:
表名: MYTABLE
表设计:
自动编号类型 ID
字符串类型 NAME
BOOL类型 SEX
(1)增
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
_variant_t m_resa; //可声明为成员变量 CString strMyName = "MyName"; CString strSex = "true"; CString sql; sql = "insert into MYTABLE (NAME,SEX) "; sql += "values ('" + strMyName +"',"; sql += " " + strSex + " "; sql += ")"; try { m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作 } catch(_com_error e) { AfxMessageBox("数据库增错误",MB_ICONEXCLAMATION); exit(0); //错误,程序退出 } |
(2)删
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
_variant_t m_resa; //可声明为成员变量 CString strID = "1"; //所要删除记录的ID号 CString sql; sql = "delete from MYTABLE "; //注意需要有空格 sql += "where ID = " + strID; //其他语法详查SQL语句 try { m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作 } catch(_com_error e) { AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION); exit(0); //错误,程序退出 } |
(3)改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
_variant_t m_resa; //可声明为成员变量 CString sql; CString strMyName = "MyName"; CString strSex = "true"; CString strID = "1"; //所要更新的记录ID sql = "update MYTABLE set "; sql += "NAME = '" + strMyName +"', "; sql += "SEX = " + strSex + " "; sql += "where id = " + strID; try { m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作 } catch(_com_error e) { AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION); exit(0); //错误,程序退出 } |
(4)查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
_variant_t m_resa; //可声明为成员变量 CString sql; sql = "Select * from MYTABLE"; //查询语句改变,相应下面的语句也要改变 //#include <afxtempl.h> //需加入头文件 //CArray<CMyClass,CMyClass&> m_Array; //可用容器保存你取得的数据 try { m_res = m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); } catch(_com_error e) { AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION); exit(0); } //m_Array.RemoveAll(); //清空容器 try { while(!m_res->adoEOF) //循环遍历记录 { _variant_t vID, vName, vSex; vID = m_res->GetCollect("ID"); vName = m_res->GetCollect("NAME"); vSex = m_res->GetCollect("SEX"); /////////////////////////////////////////////// int nID; nID = (long)vID.lVal; /////////////////////////////////////////////// CString strName; if(VT_NULL != vName.vt ) //如果数据不为空 { strName = (LPCTSTR)vName.bstrVal; } /////////////////////////////////////////////// bool bSex; if(VT_NULL != vSex.vt ) { bSex = (bool)vSex.boolVal; } //////////////////////////////////////////////// //CMyClass one(nID, strName, bSex); //创建数据对象 //m_Array.Add(one); //加入数组 m_res->MoveNext(); //移动到下一条记录 } } catch(_com_error e) { AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION); exit(0); } |
4.关闭数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try { if(m_res != NULL) { m_res->Close(); //关闭记录集 } if(m_conn != NULL) { m_conn->Close(); //关闭连接 } } catch(_com_error e) { AfxMessageBox("数据库关闭错误",MB_ICONEXCLAMATION); exit(0); } |
5.总结
数据库操作多种多样,可以查查相关资料
这里只介绍了简单的一种操作,面向对象封装一下,直接调用即可
Trackback from your site.
(2)条评论
Wupei
| #
是放在工程目录下,也就是程序目录下,不是放在exe的目录下~
回复
笔记
| #
用ADO连接ACCESS数据库时,
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open(“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Test.mdb”,
“”,””,adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(“数据库连接失败!”);
return FALSE;
}
为什么总是出错,Test.mdb文件应该放在那里啊?是放在程序当前目录下吗!为什么总是提示”数据库连接失败!”
回复