详细配置C++借助ADO连接Access数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hffhjh111/article/details/51940935

这是写给你的。----2016-7-18
(本篇不会介绍连接原理,只介绍操作步骤入门)
 
1.     环境配置(Win8-Win10,64位)
2.     连接与测试代码
3.     意外情况解决方案
 
环境配置:
1.     先安装你的Access数据库(微软Office 2016中含有或者单独下载,下载地址:http://msdn.itellyou.cn/ 左侧选择应用程序一栏,注意选择下载64位,即标有X64的)
特殊情况查看意外解决方案 (A)
2.     安装Microsoft Access database engine 2007,他的作用暂时可理解为我们所写的程序与Access之间的沟通桥梁--“传话人”。
Microsoft Access database engine 2010(可以安装,但后面的代码是2007的,所以暂时建议使用2007)
下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=13255
Microsoft Access database engine 2007
下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=23734
特殊情况查看意外解决方案 (C)


连接与测试代码:
本例代码使用VS2010以上版本测试
建议去文末下载写好的含注释的测试代码看。


1.     新建你的数据库表
打开Access
选择空白数据库,为你的数据库中表项起一个名字 如 Test
设计你的存储表格
本例附有测试表格database1.accdb
2.
在你程序的stdafx.h头文件中加入
#import"C:/ProgramFiles/CommonFiles/System/ADO/msado15.dll"
rename("EOF","adoEOF"), rename("BOF","adoBOF")
(如果加载失败的话,去c:\program files\common files\system\ado查看是否有msado15.dll)
3.测试代码介绍
// LinkDBForHX.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include<iostream>//atlstr
#include<atlstr.h>
using namespace ADODB;
using namespace std;



class AdoAccess {
public:
	_ConnectionPtr   HX_pConnection; // 数据库指针
	_RecordsetPtr    HX_pRecordset; // 命令指针
	_CommandPtr      HX_pCommand; // 记录指针
	void OnInitADOConn() {
		::CoInitialize(NULL);
		try
		{
			HX_pConnection.CreateInstance(__uuidof(Connection));//等价于 //HX_pConnection.CreateInstance("ADODB.Connection");
			//此句包含定位你数据库的所需的访问信息
			_bstr_t strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database1.accdb;Persist Security Info=False ";
			//测试//_bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database1.accdb;Persist Security Info=False";//此句包含定位你数据库的所需的访问信息
			//测试//_bstr_t strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Driver = { Microsoft Access Driver(*.mdb, *.accdb) }; DBQ =Database1.accdb;Persist Security Info=False ";
			//此句包含定位你数据库的所需的访问信息
			//连接master数据库,无密码。
			HX_pConnection->Open(strConnect,"","",adModeUnknown);	//连接数据库

			cout << "连接成功,并获得智能指针" << endl;
		}
		catch (_com_error e)
		{
			cout <<e.Description() << endl;
		}
	
	}
	void ExitConnect() {
		if (HX_pRecordset != NULL)
			HX_pRecordset->Close();
		HX_pConnection->Close();
		::CoUninitialize();
	}
};

int main()
{
	AdoAccess dataBase;

	//初始化
	dataBase.OnInitADOConn();
	dataBase.HX_pRecordset.CreateInstance("ADODB.Recordset");


	//选择名为Test的表格
	dataBase.HX_pRecordset->Open("select *  from Test",
		dataBase.HX_pConnection.GetInterfacePtr(),
		adOpenDynamic,
		adLockOptimistic,
		adCmdText);

	int i = 0;
	//读取其中的name字段所有数据,并显示
	while (!dataBase.HX_pRecordset->adoEOF)
	{
		
		_variant_t var;
		string strValue;
		var = dataBase.HX_pRecordset->GetCollect("name");
		//其他类似,都是通过HX_pRecordset传递SQL语句执行查找、添加、删除等命令

		if (var.vt != VT_NULL)
			strValue = _com_util::ConvertBSTRToString((_bstr_t)var);

		++i;
		cout << "name " << i << "  " << strValue << endl;;

		dataBase.HX_pRecordset->MoveNext();
	}


	//卸载com组件
	dataBase.ExitConnect();
	int xxxx = 0;
	cout << "输入数字结束\n";
	cin >> xxxx;
    return 0;
}

意外情况解决方案

A 描述:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。

  请正确安装环境配置中的第一步

 

B  若A无法解决问题。

选择 该应用程序的 应用程序池 ------>选择高级设置--------->启用32位应用程序 ------->true  

操作如下:

按下win + R

在弹出的对话框中输入inetmgr,然后按回车键

选择最左侧


点击应用程序池

再点击下图的DefaultAPPPool 


选择高级设置


选择启用32位应用程序 ---置为True.

最后选择确认保存

 

 

C 重新安装 Microsoft Access databaseengine 2007

D 程序若提示缺少符号集,请下载相关符号集或者在联网状态下动态加载

 

E问


示例项目下载地址:

http://download.csdn.net/detail/hffhjh111/9866831



展开阅读全文

没有更多推荐了,返回首页