c++怎么连接access数据库

2024-12-04 16:20:18
推荐回答(1个)
回答(1):

环境配置:
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 : 定义控制台应用程序的入口点。

[cpp] view plain copy

#include "stdafx.h"
#include//atlstr
#include
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 <}

}
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 程序若提示缺少符号集,请下载相关符号集或者在联网状态下动态加载