尽管微软已经开始边缘化Access,但是Access作为单机小数据库来说,仍有其自身的优势,本文还是介绍下如何在Toolkit二次开发使用Access,数据库采用ADO接口进行访问。
1.环境准备
新版Office虽然集成了Access,但是已弱化了相关功能,自Office 2010开始,如果需要使用ADO访问Access,还需要下载Microsoft Access 2010 数据库引擎可再发行程序包,该程序同样适用于Access 2013和Access 2016。
2.配置工程
工程配置和普通工程一致,在Stdafx.h加入以下代码,注意根据编译是X64和X86以及系统实际选择正确的库文件路径即可:
1
| #import "C:\\Program Files\\Common Files\\System\ado\\msado15.dll" no_namespace rename("EOF", "adoEOF")
|
3. 关键源码
配置好后项目和普通的MFC程序访问数据库代码没有任何差别,直接给出连接数据库和读取数据库的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| _ConnectionPtr m_pConnection;
try { m_pConnection.CreateInstance("ADODB.Connection"); m_pConnection->ConnectionTimeout = 3; CSpath = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb;"; m_pConnection->Open((_bstr_t)CSpath, "", "", adModeUnknown); } catch (_com_error e) { return 0; }
void ReadAccess() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstance(__uuidof(Recordset)); _variant_t value; try { m_pRecordset->Open(_variant_t("SELECT test FROM Tab WHERE ID=1"), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); _variant_t var = (long)0; value = m_pRecordset->GetCollect(var); AfxMessageBox(CString(value)); m_pRecordset->Close(); } catch (_com_error e) { } }
|
完整代码可在Github.com下载。