- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
view plaincopy to clipboardprint?
1. //打印调用 ADO 控件时产生的详细错误信息 2. void CAdoRWAccessDlg::dump_com_error(_com_error &e) 3. { 4. CString ErrorStr;
5. _bstr_t bstrSource(e.Source()); 6. _bstr_t bstrDescription(e.Description()); 7. ErrorStr.Format( "/n/tADO Error/n/tCode = %08lx/n/tCode meaning = %s/n/tSource = %s/n/tDescription = %s/n/n", 8. e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription ); 9. //在调试窗口中打印错误信息,在 Release 版中可用 DBGView 查看错误信息 10. ::OutputDebugString((LPCTSTR)ErrorStr); 11. #ifdef _DEBUG 12. AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); 13. #endif 14. } [cpp] view plaincopyprint? 1. //打印调用 ADO 控件时产生的详细错误信息 2. void CAdoRWAccessDlg::dump_com_error(_com_error &e) 3. { 4. CString ErrorStr; 5. _bstr_t bstrSource(e.Source()); 6. _bstr_t bstrDescription(e.Description()); 7. ErrorStr.Format( "/n/tADO Error/n/tCode = %08lx/n/tCode meaning = %s/n/tSource = %s/n/tDescription = %s/n/n", 8. e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription ); 9. //在调试窗口中打印错误信息,在 Release 版中可用 DBGView 查看错误信息 10. ::OutputDebugString((LPCTSTR)ErrorStr); 11. #ifdef _DEBUG 12. AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); 13. #endif 14. }
ห้องสมุดไป่ตู้
在 BOOL CAdoRWAccessApp::InitInstance()函数中
view plaincopy to clipboardprint?
1. // 初始化 COM,创建 ADO 连接等操作
2. AfxOleInit(); 3. m_pConnection.CreateInstance(__uuidof(Connection)); 4. // 在 ADO 操作中建议语句中要常用 try...catch()来捕获错误信息, 5. // 因为它有时会经常出现一些想不到的错误。jingzhou xu 6. try 7. { 8. // 打开本地 Access 库 Demo.mdb 9. m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown); 10. 11. } 12. catch(_com_error& e) 13. { 14. //调用在 CAdoRWAccessDlg 中打印错误信息的静态函数 15. CAdoRWAccessDlg::dump_com_error(e); 16. return FALSE; 17. } [cpp] view plaincopyprint? 1. // 初始化 COM,创建 ADO 连接等操作 2. AfxOleInit(); 3. m_pConnection.CreateInstance(__uuidof(Connection)); 4. // 在 ADO 操作中建议语句中要常用 try...catch()来捕获错误信息, 5. // 因为它有时会经常出现一些想不到的错误。jingzhou xu 6. try 7. { 8. // 打开本地 Access 库 Demo.mdb 9. m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown); 10. 11. } 12. catch(_com_error& e)
[cpp] view plaincopyprint? 1. // 加入 ADO 支持库, jingzhou xu 2. #import "c:/program files/common files/system/ado/msado15.dll" / 3. no_namespace /
4.
rename ("EOF", "adoEOF")
view plaincopy to clipboardprint?
1. // 加入 ADO 支持库, jingzhou xu 2. #import "c:/program files/common files/system/ado/msado15.dll" / 3. 4. no_namespace / rename ("EOF", "adoEOF")
在示例程序中我们仍采用原库结构,数据库名 Demo.mdb,库内表名 DemoTable,表内字 段名为 Name(姓名)和 Age(年龄)的两个字段,来构造示例程序操作所需的 Access 数据库, 这也和上两篇文章的示例源码中的库结构相兼容。 下面让我们看看 ADO 数据库访问技术使用的基本步骤及方法: 首先,要用#import 语句来引用支持 ADO 的组件类型库(*.tlb),其中类型库可以作为可执行 程序(DLL、EXE 等)的一部分被定位在其自身程序中的附属资源里,如:被定位在 msado15.dll 的附属资源中,只需要直接用#import 引用它既可。可以直接在 Stdafx.h 文件 中加入下面语句来实现:
//打印调用ADO控件时产生的详细错误信息 void CAdoRWAccessDlg::dump_com_error(_com_error &e) { CString ErrorStr; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); ErrorStr.Format( "/n/tADO Error/n/tCode = % e.Error(), e.ErrorMessage(), (LPCTS //在调试窗口中打印错误信息,在Release版中可用DB ::OutputDebugString((LPCTSTR)ErrorStr); #ifdef _DEBUG AfxMessageBox(ErrorStr, MB_OK | MB_ICONERRO #endif }
view plaincopy to clipboardprint?
1. _ConnectionPtr m_pConnection; [cpp] view plaincopyprint? 1. _ConnectionPtr m_pConnection;
_ConnectionPtr m_pConnection;
1、_ConnectionPtr 智能指针,通常用于打开、关闭一个库连接或用它的 Execute 方法来执 行一个不返回结果的命令语句(用法和 _CommandPtr 中的 Execute 方法类似)。 ——打开一个库连接。先创建一个实例指针,再用 Open 打开一个库连接,它将返回一个 IUnknown 的自动化接口指针。代码如下所示: 在 CAdoRWAccessApp 中添加一个 public 的成员变量
MFC 直接通过 ADO 操作 Access 数据库(修改版)
本文根据 VCKBASE 网站的上的《直接通过 ADO 操作 Access 数据库 》 修改而来,版权 归原作者/徐景周 直接通过 ADO 操作 Access 数据库
作者/徐景周 我在 《VC 知识库在线杂志》 第十四期和第十五期上曾发表了两篇文章——“直接通过 ODBC 读、 写 Excel 表格文件 ”和“直接通过 DAO 读、 写 Access 文件 ”, 先后给大家介绍了 ODBC 和 DAO 两种数据库访问技术的基本使用方法,这次要给大家介绍的是 ADO 数据库访问技 术的使用方法。 ADO(Active Data Object, 活动数据对象)实际上是一种基于 COM(组件对象 模型)的自动化接口(IDispatch)技术,并以 OLE DB(对象连接和镶入的数据库)为基础,经过 OLE DB 精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO 提 供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于 ODBC 数据源也提 供了一般的 OLE DB Privider,所以 ADO 不仅可以应用自身的 OLE DB Privider,而且还可 以应用所有的 ODBC 驱动程序。关于 OLE DB 和 ADO 的其它详细情况,读者可以自行查 阅相关书籍或 MSDN,这里就不一一说明了。让我们直接步入主题:如何掌握 ADO 这种数 据库访问技术。ADO 的操作方法和前面讲过的 DAO 的操作在很多方面存在相似之处,在 这里,笔者为了更有效的说明它的使用方法,用 VC6.0 做了一个示例程序—— AdoRWAccess,这个示例程序可以直接通过 ADO 来操作 Access 数据库,示例程序的运 行效果如下图所示:
// 加入ADO支持库, jingzhou xu #import "c:/program files/common files/system/ado/m no_namespace / rename ("EOF", "adoEOF")
其中路径名可以根据自己系统安装的 ADO 支持文件的路径来自行设定。当编译器遇到 #import 语句时,它会为引用组件类型库中的接口生成包装类,#import 语句实际上相当于 执行了 API 涵数 LoadTypeLib()。#import 语句会在工程可执行程序输出目录中产生两个文 件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指 针,并为各种接口方法、枚举类型,CLSID 等进行声明,创建一系列包装方法。语句 no_namespace 说明 ADO 对象不使用命名空间,rename ("EOF", "adoEOF")说明将 ADO 中结束标志 EOF 改为 adoEOF,以避免和其它库中命名相冲突。 其次,在程序初始过程中需要初始化组件,一般可以用 CoInitialize(NULL);来实现,这种方 法在结束时要关闭初始化的 COM,可以用下面语句 CoUnInitialize();来实现。在 MFC 中还 可以采用另一种方法来实现初始化 COM,这种方法只需要一条语句便可以自动为我们实现 初始化 COM 和结束时关闭 COM 的操作,语句如下所示: AfxOleInit(); 接着,就可以直接使用 ADO 的操作了。我们经常使用的只是前面用#import 语句引用类型 库时,生成的包装类.tlh 中声明的智能指针中的三个,它们分别是_ConnectionPtr、 _RecordsetPtr 和_CommandPtr。下面分别对它们的使用方法进行介绍 在介绍前我们先写个函数,本例中添加为类变量的静态函数