简介

Microsoft Office Access是微软发布的一款关系型数据库
起初是以".mdb"为后缀的文件,支撑其操作的数据库引擎是Microsoft.Jet.OLEDB;随着时间的发展,后面以".access"为后缀的文件,数据库引擎也升级成了Microsoft.ACE.OLEDB;

创建项目

可创建任意项目,此处直接上截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问数据库

步骤一:导入动态链接库:msado15.dll

此文件再安装有office的电脑上基本都有;默认路径为:C:\Program Files (x86)\Common Files\System\ado;找到此文件后,要么直接路过绝对路径导入,要么直接将masdo15.dll拷贝到项目路径,通过相对路径导入;
(ps:有可能编译器会在#import处报错,但不止真的错,不妨继续执行,说不定会有惊喜的;)

#include <stdio.h>
#import "DLL\msado15.dll"  no_namespace  rename ("EOF", "adoEOF")  

步骤二:选用数据库引擎打开数据库

int main()
{
	_ConnectionPtr pConnection;		//连接类
	CoInitialize(NULL);					//初始化OLE/COM库环境  在引入ado并初始化成功com库后,就可以使用智能指针了  
	try
	{
		HRESULT hr = pConnection.CreateInstance("ADODB.Connection");//创建Connection对象  
		if (SUCCEEDED(hr))
		{
			//数据库引擎1:Microsoft.ACE.OLEDB.12.0      访问 *.access数据库,无密码
			//hr = pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1-mydb.accdb;Persist Security Info=False ", "", "", adModeUnknown);
			
			//数据库引擎2:Microsoft.Jet.OLEDB.4.0       访问*.mdb数据库,有密码
			hr = pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB\\my.mdb;Persist Security Info=True;Jet OLEDB:Database Password=123456", "", "", adModeUnknown);
		}
	}
	catch (_com_error e)
	{
		printf("数据库连接失败\n");
		return false;
	}
	printf("数据库连接成功\n");
	return true;
}

步骤三:对数据库进行增,删,改,查操作

Access数据库依旧使用SQL语句对数据库进行操作,所以说增删改查的操作也是基于SQL语法进行的。

    char strSQL[] = "SELECT * FROM T1";
	_RecordsetPtr pRecordset;							//查询结果类
	pRecordset.CreateInstance(__uuidof(Recordset));		//实例化结果集对象     执行sql语句    
	try
	{
		if (pRecordset->State)
		{
			pRecordset->Close();
		}
		pRecordset->Open(strSQL, pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
	}
	catch (_com_error* e)
	{
		printf("执行sql语句失败\n")
		if (pConnection->State)
		{
			pConnection->Close();
			pConnection = NULL;
		}
		CoUninitialize();
		return false;
	}
	printf("执行sql语句成功\n")

步骤四:显示数据库信息

显示数据库信息的格式主要是根据自己需求;获取数据库表格的记录名等,都有相应的接口,需要我们自己去调用;

try
	{
		if (pRecordset->BOF)
		{
			printf("查询的表格数据为空!\n");
			if (pConnection->State)
			{
				pRecordset->Close();
				pRecordset = NULL;
				pConnection->Close();
				pConnection = NULL;
			}
			CoUninitialize();
			return true;
		}
		printf("数据库的信息:\n");
		
		pRecordset->MoveFirst();					//游标指向首记录
		_variant_t var[3]; 							//从结果集中取出的数据放到var中  
		char* t1[3];
		while (!pRecordset->adoEOF)
		{
			var[0] = pRecordset->GetCollect("F1");
			if (var[0].vt != VT_NULL)
			{
				t1[0] = _com_util::ConvertBSTRToString((_bstr_t)var[0]);
			}
			printf(t1[0]);
			printf("\t");
			var[1] = pRecordset->GetCollect("F2");
			if (var[1].vt != VT_NULL)
			{
				t1[1] = _com_util::ConvertBSTRToString((_bstr_t)var[1]);
			}
			printf(t1[1]);
			printf("\t");
			var[2] = pRecordset->GetCollect("F3");
			if (var[2].vt != VT_NULL)
			{
				t1[2] = _com_util::ConvertBSTRToString((_bstr_t)var[2]);
			}
			printf(t1[2]);
			printf("\n");
			pRecordset->MoveNext();				//将游标指向下一行
		}
	}
	catch (_com_error* e)
	{
		cout << e->ErrorMessage() << endl;
	}

步骤五:关闭数据库

数据库使用完成后,需要断开数据库,防止连接线程过多导致程序性能下降;

if (pConnection->State)
	{
		pRecordset->Close();
		pRecordset = NULL;
		pConnection->Close();
		pConnection = NULL;
	}
	CoUninitialize();

总结

访问Access数据库,主要的思路是使用API,任何数据库的调用都有对应的API供我们使用,它也不列外。然后是数据库引擎,即打开数据库的具体接口,与具体数据库连接;剩下的就是结合SQL语句对数据库具体的增删改查操作了;

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐