`
ihuashao
  • 浏览: 4544655 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

VC下利用ADO访问Access数据库(Use ADO)(转载)

阅读更多
(From http://www.j2megame.org/wupei/blog.php/myblog/vc/2007/07/21/vc-ado-access)

VC下利用ADO直接访问Access数据库步骤不需要用户建立ODBC数据源)

1.包含相关动态链接库

  1. //在StdAfx.h中,最后部分添加(注意:一定要在最后部分,否则会编译出错)
  2. #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")


2.连接的创建与初始化

  1. //相关成员变量
  2. _ConnectionPtr m_conn;
  3. _RecordsetPtr m_res;
  4. //成员函数块(一般写在CDocment类构造函数即可)
  5. try
  6. {
  7. CoInitialize(NULL);
  8. m_conn.CreateInstance(_uuidof(Connection));
  9. CString strFileName;
  10. strFileName = "MYBASE.mdb"; //添加相应你的数据库的文件名,编辑状态应放在源文件目录下
  11. m_conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName,
  12. "","",adConnectUnspecified); //用户名,密码
  13. m_res.CreateInstance(_uuidof(Recordset));
  14. }
  15. catch(_com_error e) //异常检测
  16. {
  17. AfxMessageBox("数据库连接错误!",MB_ICONEXCLAMATION);
  18. exit(0); //错误,程序退出
  19. }


3.数据库相关操作(操作方法很多,这里只提供一种简易操作)
假设数据库表设计如下:
表名: MYTABLE
表设计:
自动编号类型 ID
字符串类型 NAME
BOOL类型 SEX

(1)增

  1. _variant_t m_resa; //可声明为成员变量
  2. CString strMyName = "MyName";
  3. CString strSex = "true";
  4. CString sql;
  5. sql = "insert into MYTABLE (NAME,SEX) ";
  6. sql += "values ('" + strMyName +"',";
  7. sql += " " + strSex + " ";
  8. sql += ")";
  9. try
  10. {
  11. m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作
  12. }
  13. catch(_com_error e)
  14. {
  15. AfxMessageBox("数据库增错误",MB_ICONEXCLAMATION);
  16. exit(0); //错误,程序退出
  17. }


(2)删

  1. _variant_t m_resa; //可声明为成员变量
  2. CString strID = "1"; //所要删除记录的ID号
  3. CString sql;
  4. sql = "delete from MYTABLE "; //注意需要有空格
  5. sql += "where ID = " + strID; //其他语法详查SQL语句
  6. try
  7. {
  8. m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作
  9. }
  10. catch(_com_error e)
  11. {
  12. AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION);
  13. exit(0); //错误,程序退出
  14. }


(3)改

  1. _variant_t m_resa; //可声明为成员变量
  2. CString sql;
  3. CString strMyName = "MyName";
  4. CString strSex = "true";
  5. CString strID = "1"; //所要更新的记录ID
  6. sql = "update MYTABLE set ";
  7. sql += "NAME = '" + strMyName +"', ";
  8. sql += "SEX = " + strSex + " ";
  9. sql += "where id = " + strID;
  10. try
  11. {
  12. m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作
  13. }
  14. catch(_com_error e)
  15. {
  16. AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION);
  17. exit(0); //错误,程序退出
  18. }


(4)查

  1. _variant_t m_resa; //可声明为成员变量
  2. CString sql;
  3. sql = "Select * from MYTABLE"; //查询语句改变,相应下面的语句也要改变
  4. //#include <afxtempl.h>//需加入头文件
  5. //CArray<CMyClass,CMyClass&> m_Array; //可用容器保存你取得的数据
  6. try
  7. {
  8. m_res = m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText);
  9. }
  10. catch(_com_error e)
  11. {
  12. AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION);
  13. exit(0);
  14. }
  15. //m_Array.RemoveAll(); //清空容器
  16. try
  17. {
  18. while(!m_res->adoEOF) //循环遍历记录
  19. {
  20. _variant_t vID, vName, vSex;
  21. vID = m_res->GetCollect("ID");
  22. vName = m_res->GetCollect("NAME");
  23. vSex = m_res->GetCollect("SEX");
  24. ///////////////////////////////////////////////
  25. int nID;
  26. nID = (long)vID.lVal;
  27. ///////////////////////////////////////////////
  28. CString strName;
  29. if(VT_NULL != vName.vt ) //如果数据不为空
  30. {
  31. strName = (LPCTSTR)vName.bstrVal;
  32. }
  33. ///////////////////////////////////////////////
  34. bool bSex;
  35. if(VT_NULL != vSex.vt )
  36. {
  37. bSex = (bool)vSex.boolVal;
  38. }
  39. ////////////////////////////////////////////////
  40. //CMyClass one(nID, strName, bSex); //创建数据对象
  41. //m_Array.Add(one); //加入数组
  42. m_res->MoveNext(); //移动到下一条记录
  43. }
  44. }
  45. catch(_com_error e)
  46. {
  47. AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION);
  48. exit(0);
  49. }


4.关闭数据库

  1. try
  2. {
  3. if(m_res != NULL)
  4. {
  5. m_res->Close();//关闭记录集
  6. }
  7. if(m_conn != NULL)
  8. {
  9. m_conn->Close(); //关闭连接
  10. }
  11. }
  12. catch(_com_error e)
  13. {
  14. AfxMessageBox("数据库关闭错误",MB_ICONEXCLAMATION);
  15. exit(0);
  16. }


5.总结
数据库操作多种多样,可以查查相关资料
这里只介绍了简单的一种操作,面向对象封装一下,直接调用即可

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics