步骤1:

在StdAfx.h的#include语句之后添加

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

步骤2:

添加文件ADOConn.h

// ADOConn.h: interface for the ADOConn class.
//
//#if !defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_)
#define AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_
#include <icrsint.h>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class ADOConn
{
public:_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;
public:_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);ADOConn();virtual ~ADOConn();void OnInitADOConn();BOOL ExecuteSQL(_bstr_t bstrSQL);void ExitConnect();
};#endif // !defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_)

步骤3:

添加文件ADOConn.cpp

// ADOConn.cpp: implementation of the ADOConn class.
//
//

#include "stdafx.h"
//#include "SuperMarket.h"

#include "ADOConn.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//
// Construction/Destruction
//

ADOConn::ADOConn()
{}ADOConn::~ADOConn()
{}void ADOConn::OnInitADOConn()
{::CoInitialize(NULL);// 此句很重要,不要遗漏try{m_pConnection.CreateInstance("ADODB.Connection");CString path = AfxGetApp()->m_lpCmdLine;if (path.IsEmpty()){m_pConnection->Open(_bstr_t(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fctest.mdb;Persist Security Info=False")),"","",adOpenUnspecified);}else{int pos = path.ReverseFind('\\');path = path.Left(pos);
//注:fctest.mdb是我的本地数据库名        CString mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ path +"\\fctest.mdb;Persist Security Info=False";m_pConnection->Open((_bstr_t)mdbPath,"","",adOpenUnspecified);}}catch(_com_error e){  AfxMessageBox(e.Description());return;}
}//执行SQL语句
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{try{if(m_pConnection==NULL)OnInitADOConn();m_pConnection->Execute(bstrSQL,NULL,adCmdText);return TRUE;}catch(_com_error e){
//        e.Description();
        AfxMessageBox(e.Description());return FALSE;}
}//取消和数据库的链接
void ADOConn::ExitConnect()
{if(m_pRecordset != NULL)m_pRecordset->Close();m_pConnection->Close();::CoUninitialize();// 此句很重要,不要遗漏
}//读取数据集
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{try{if(m_pConnection==NULL)OnInitADOConn();m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);}catch(_com_error e){e.Description();}return m_pRecordset;
}

使用方法:

dialog中有IDC_LIST1的list。

查询:

        ADOConn ado;ado.OnInitADOConn();CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);pListCtrl->DeleteAllItems();int n = 0;CString sql;sql.Format("select * from test where id > 0");ado.m_pRecordset = ado.GetRecordSet((_bstr_t)sql);//读取数据集while(!ado.m_pRecordset->adoEOF){CString i1,i2,i3,i4;i1 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("id");i2 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("name");i3 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("age");i4 = (char*)(_bstr_t)ado.m_pRecordset->GetCollect("zhiye");pListCtrl->InsertItem(n,i1);pListCtrl->SetItemText(n,1,i2);pListCtrl->SetItemText(n,2,i3);pListCtrl->SetItemText(n,3,i4);n++;ado.m_pRecordset->MoveNext();}ado.ExitConnect();    

增加:

        ADOConn     ado;ado.OnInitADOConn();CString sql;sql.Format("insert into test(id,name,age,zhiye) values (%d,'%s',%d,'%s')",5,"老潘",23,"打手");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();    

删除:

        ADOConn ado;ado.OnInitADOConn();CString sql;sql.Format("delete from test where id = 5");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();    

修改:

ADOConn ado;ado.OnInitADOConn();CString sql;sql.Format("update test set name = '%s' where name = '%s' ","潘把子","老潘");ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();

常见问题:

1.win7下编译,xp下不能使用,会报错

解决办法:注意到代码里有

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

实际上win7和win xp的msado15.dll是不一样的,向下兼容,并且看到有人说win xp下的msado15.dll也不尽相同。如果想在win7下编译,并且能在xp下运行,可以拷贝

win XP中C:\Program Files\Common Files\System\路径下的ado文件夹到win7相同路径下(注意保存原来的win7 ado文件夹),这样在win7下编译的程序在win xp下也可以运行。win7 及 win XP下的ado文件夹见附件。

2.初始化失败,调试时发现_ConnectionPtr 指针为空

原因:当时没有加::CoInitialize(NULL);及::CoUninitialize();语句。

示例源码下载:

链接: https://pan.baidu.com/s/1cde7h0 密码: 1xu8

xp ADO下载:

链接: https://pan.baidu.com/s/1sljv6ax 密码: pcn9

win7 ADO下载:

链接: https://pan.baidu.com/s/1cbI4t4 密码: ne39

转载于:https://www.cnblogs.com/vipwtl/p/7771044.html

VC ADO连接ACCESS步骤及错误处理相关推荐

  1. ADO连接Access数据库,Access版本问题

    最近做项目需要用到Access数据库,采用ADO连接Access数据库,需要注意的地方如下: 1.程序初始化的时候,需要初始化OLE库 // 初始化 OLE 库  if (!AfxOleInit()) ...

  2. vc ado连接mysql_VC用Ado接口连接和使用数据库及注意事项

    一.阅读本文所需注意的其它事项 1.进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现) 2.每个源文件的每行注释说明了其文件名 3.请关注相关头文件包含关系 4.请关 ...

  3. VC6.0 通过ado连接access数据库

    小实例 http://download.csdn.net/detail/cxq_1993/8985731 ADO连接数据库 1.COM库的初始化 我们可以使用AfxOleInit()来初始化COM库, ...

  4. VS2013下MFC通过ADO连接Access数据库

    (VS2013+Access2003) 1. 新建一个基于对话框的MFC项目:ADO_Access0306 在stdafx.h头文件末尾添加(网上有说在某个#include后面的添加的,也有说在合适位 ...

  5. ADO连接ACCESS数据库

    使用ADOX,需要引入ADOX的动态链接库msadox.dll,首先在stdafx.h中加入如下语句: #import "c:/program files/common files/syst ...

  6. VS2019通过ADO连接access数据库(详细)

    1.建立数据库,在控制面板->管理工具->数据源中添加数据源. 在系统DSN中点击添加 选择  Microsoft Access Driver(*.mdb) 自行对数据源进行命名,并点击选 ...

  7. mfc连接oracle12c,MFC ADO连接Oracle12c数据库 类库文件

    Stdafx.h Stdafx.h libado.h libado.h libado.cpp libado.cpp 参考网址如下:http://www.cnblogs.com/livewithnore ...

  8. 解决VBA ADO连接Access2010以上版本密码无效问题

    解决EXCEL VBA ADO连接ACCESS 2010,但总提示密码无效,但密码是正确的 1.先以独占的方式打开,删除ACCESS2007或者ACCESS2010的密码. 2.ACCESSS 201 ...

  9. VC++使用ADO开发ACCESS数据库

    VC++使用ADO开发ACCESS数据库 ADO和ADOX到底是什么,二者的作用和区别 ADO是Microsoft 最新推出的数据库访问的高层软件接口.它和Microsoft以前的数据库访问接口DAO ...

最新文章

  1. gradle项目 避免每次下载gradle文件/解决依赖下载慢的问题
  2. 李开复给中国学生的第七封信:21世纪最需要的7种人才
  3. php oop 实际工作,PHP OOP注意点(一)
  4. C#高性能大容量SOCKET并发(十一):编写上传客户端
  5. asp实现注册登录界面_python app (kivy)-与小型数据库连接,实现注册登录操作
  6. Json-server 创建模拟API服务器
  7. Team Foundation Server 2010 安装、部署与配置(三):安装 .
  8. STM32F103串口1 printf函数的实现
  9. SQL Server数据库持续集成简介
  10. 基于Java的智能问答系统
  11. WPF学习笔记——4)使用StackPanel面板进行简单布局
  12. CAD手机看图:CAD图纸中添加的批注发送给别人后批注却消失了?
  13. 缺陷管理工具JIRA和禅道对比
  14. 《Flutter入门疑难杂症》ios deactivate没反应的解决方案
  15. graphpad做柱状图,GraphPad软件做图表,就这么简单!
  16. linkedin 分享_如何将您的LinkedIn个人资料添加到WordPress
  17. 2021年茶艺师(初级)考试技巧及茶艺师(初级)试题及解析
  18. python---flask解决跨域
  19. java处理Emoji表情
  20. QTableView基本用法讲解,Qt表格控件的使用方法

热门文章

  1. mysql启动错误1.69,MySQL无法启动例一
  2. oa办公自动化系统(ssh mysql)_OA办公自动化系统(SSH+MySQL)
  3. C#连接MySQL时出现Unable to connect to any of the specified MySQL hosts.错误
  4. ubuntu18.04搭建 kubernetes(k8s)集群
  5. 查看当前系统的glibc版本
  6. ssldump编译及使用过程
  7. win10+anaconda3安装tensorflow-gpu和pytorch-gpu版
  8. JDBC之一:JDBC快速入门
  9. 设计模式的概念和分类
  10. elasticsearch 安装过程中可遇到的问题