Microsoft Office Access是由 微软发布的 关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
个人吐槽
最近一个小项目需要客户需要用到 access 于是 我去下载一个 怎么找都是 跳到 Microsoft Office这个鬼玩意。。 折腾了一个多小时才发现 是他的组件之一好吧。。。。
正文
链接dll
需要 先链接 dll 一般安装之后 都会在 C:\Program Files\Common Files\System\ADO\msado15.dll 这个位置 当然如果没有直接查找 msado15.dll 自己改路径好了把这个玩意放到 stdafx.h头文件里面#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
no_namespace 不适用命名空间
rename("EOF", "adoEOF") 因为 EOF和windows 宏定义重出 所以需要自己命名一个 一般看他们的文章都写 ado EOF...随大流好了
然后在类里面导入三个 对象
_ConnectionPtr m_pConnection;//创建数据库的链接对象 _RecordsetPtr m_pRecordset;// 创建记录集 采集数据 _CommandPtr m_pCommand;//命令对象 使用SQL语句
初始化
忘记了是摘抄那个前辈的代码了。。。 关键点就是Data Source=zk_study.mdb 改成自己的 mdb..
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));//创建Connection对象 if (SUCCEEDED(hr)) { m_pConnection->ConnectionTimeout = 600;// 链接数据库时间限制 m_pConnection->CommandTimeout = 120;// 也许是SQL语句执行时间限制 //然后打开数据库 OPEN函数的参数是很有讲究的 //Open 方法可打开一个到数据源的连接。当连接打开时,您可以对数据源执行命令 //一个包含有关连接的信息的字符串值。该字符串由一系列被分号隔开的 parameter=value 语句组成的。 //一个字符串值,包含建立连接时要使用的用户名称。 //一个字符串值,包含建立连接时要使用的密码。 //一个 ConnectOptionEnum 值,确定应在建立连接之后(同步)还是应在建立连接之前(异步)返回本方法。 hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=zk_study.mdb", "", "", adModeUnknown);// //ConnectionString 属性有 5 个参数: //Provider---》用于连接的提供者的名称。 //File Name---》提供者特有的文件(例如,持久保留的数据源对象)的名称,这些文件中包含预置的连接信息。 //Remote Provider--》当打开客户端连接时使用的提供者的名称。(仅限于远程数据服务。) //Remote Server--》当打开客户端连接时使用的服务器的路径名称。(仅限于远程数据服务。) //url---》标识资源(比如文件或目录)的绝对 URL。 //打开模式 /* adModeUnknown = 0, adModeRead = 1, adModeWrite = 2, adModeReadWrite = 3, adModeShareDenyRead = 4, adModeShareDenyWrite = 8, adModeShareExclusive = 12, adModeShareDenyNone = 16, adModeRecursive = 4194304 */ m_pRecordset.CreateInstance(__uuidof(Recordset));//这是com组件里面创建对象的调用方法,对象调用CreateInstance创建,参数是全球唯一标示符 }
查询
直接使用 sql 的语句即可
增删改查 都是 一路货色 会SQL语句即可char buf[MAX_PATH]; sprintf(buf, "SELECT * FROM %c", ch);//查找的表格 m_pRecordset->Open(buf, // 查询STUDENT表中所有字段,即对表STUDENT进行操作 m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); while (!m_pRecordset->adoEOF) { _variant_t theValue; theValue = m_pRecordset->GetCollect("释义");//查找 解释 if (theValue.vt == VT_NULL) { m_pRecordset->MoveNext(); continue;//如果不为空 的话 } m_pRecordset->MoveNext(); }