您的位置:首页 > 数据库

MFC+Access数据库(ADO数据库编程)

2016-04-05 13:17 603 查看
最近项目需要使用到数据库,项目本身使用的是MFC。于是选择了简单的Access数据,本文将介绍本人如何在MFC使用的Access数据库。顺带提一句,本文使用的系统为win8.1,64位,编译环境为VS2010和office2010,如出现连接问题,可以看看Access的位数与系统位数是否一致。

本文是在ADO(Microsoft Active Data Objects)接口下对数据库进行操作的。ADO封装了OLEDB所提供的接口,用户能通过OLEDB访问和操作数据库服务器中的数据。ADO易于使用,速度快,广泛应用于关系数据库、非关系数据库、电子邮件、文件系统等。

本文使用的是使用ADO对象的方法连接数据库,ADO对象包含连接(Connection)、命令(Command)、记录集(Recordset)、参数(Parameter)等对象。

连接对象用于连接数据源,以及处理一些命令和事物。在使用ADO访问数据库之前,必须先创建一个Connection对象,然后通过它打开与数据库的连接。

命令对象用于执行传递给数据源的命令。

记录集对象可操作来自数据源的数据,通过Recordset对象可对几乎所有的数据进行操作。所有的Recordset对象均使用记录(行)和字段(列)进行构造。

参数对象代表参数或基于参数化的Command对象的参数信息。需要进行的操作在这些命令中只定义一次,但可以使用参数改变命令的细节。

1. 新建数据库

本文使用ADOX来新建数据库。ADOX是核心ADO对象的扩展库。它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。使用ADOX需要添加引用

#import "C:/Program Files/Common Files/system/ado/msadox.dll" rename_namespace("ADOX")


创建数据库时检查该数据库是否已经存在,如果该数据库已经存在,则return。

介绍一个检查文件路径是否存在的API函数,PathFileExists()。注意添加头文件

//使用API函数PathFileExists()检查路径文件是否存在
#include "Shlwapi.h"
#pragma comment(lib,"shlwapi.lib")


CString m_AccessName;
m_AccessName = "..\\users.accdb";//Access数据库路径及名字
if(PathFileExists(m_AccessName))
{
return TRUE;
}

ADOX属于COM对象,需要对COM进行初始化。
if(!AfxOleInit())//这就是MFC初始化COM库
{
AfxMessageBox(_T("OLE初始化出错!"));
}


创建access数据库:

新建一个Catalog对象,然后调用它的Create方法就可以了。Catalog是 ADOX
的一个对象,它包含描述数据源模式目录的集合。

注意:用try...catch组合捕捉错误

ADOX::_CatalogPtr m_pCatalog = NULL;//Microsoft.ACE.OLEDB.12.0
CString DBName="Provider=Microsoft.JET.OLEDB.4.0; Data source=";//Microsoft.JET.OLEDB.4.0
DBName=DBName+m_AccessName;
try
{
m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
return TRUE;
}


2. 连接数据库

连接数据库时,需要使用Connection对象的Open方法打开与数据源的连接。使用ADO时需要引用支持ADO组件的类型库:

#import "C:/Program Files/Common Files/System/ado/msado15.dll" rename_namespace("ado20") rename("EOF","adoEOF") rename("BOF","adoBOF")
using namespace ado20;
在头文件中为类添加成员变量

//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;//智能指针,无需释放
//添加一个指向Recordset对象的指针
_RecordsetPtr  m_pRecordset;
初始化ADO Connection Recordset对象

HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
hr = m_pRecordset.CreateInstance("ADODB.Recordset");
if(SUCCEEDED(hr))
{
// CString temp1="Provider=Microsoft.Jet.OLEDB.3.51;Data Source=";
//temp1=temp1+str;
CString temp2="Provider=Microsoft.JET.OLEDB.4.0;Data Source=";
temp2=temp2+m_AccessName;
/*	_bstr_t strConnect=temp1;*/
hr = m_pConnection->Open(_bstr_t(temp2),"","",adModeUnknown);///连接数据库hr=m_pConnection->Open(_T("连接字符串"),_T("用户名"),_T("密码"),0);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
关闭记录集和连接

void ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
}


3. 在数据库中新建表(有时间待续)

4. 获取记录集数据

5. 遍历记录集

6. 向记录集中添加数据(在最后一行添加数据)

7. 修改记录集数据

8. 删除记录集数据

9. 查询记录集中数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: