Excel VBA 学习总结 - 数据访问方式小结

时间:2021-09-19 03:26:49

  Excel是处理数据的卓越工具,所以数据访问是Excel VBA学习中不得不说的事。前面我也总结过,数据是程序的核心。而数据的存储类型是数据至关重要的一个方面,针对不同的数据存储结构,衍生出了百花齐放的数据访问形式。前面的文件系统,可以说是这些方式中最简单、最直接的一种,但是要说最重要的企业级应用系统,那就得归数据库文件访问系统所属了。下面我就分几步总结一下这个最重要的数据访问系统。

一、OLE、COM和ActiveX
  这几个名词很绕口,而且与今天的主题还有相当大的联系,这里就放在最前面介绍一下。

  首先,我先给大家一个总体的概念:

  • 从时间角度讲,OLE是最早出现的,然后是COM,最后才有ActiveX。
  • 从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是最基础的。
  • 从名称角度讲,OLE、ActiveX是两个商标名称,而COM则是一个纯技术名词。
  • 从创造者来讲,它们都是Microsoft发明的。

  首先从OLE说起,OLE最初含义是指在程序之间链接和嵌入对象数据(Object Link Embeded)。从表面意思上就可以知道,OLE的思想是把不同的应用程序的数据交换提高到“对象交换”,这样程序间不但获得数据也同样获得彼此的应用程序对象,并且可以直接使用彼此的数据内容。这个方面典型的应用,例如剪贴板可以在不同的程序间通信(复制和粘贴),Word中可以嵌入很多图形和其他的非文本数据。不过最初的OLE1.0,这方面最多的就是应用于Microsoft的复合文档,其它的厂商并不买账,这在一定程度上限制了这种技术的使用。为了继续推广这种思路,Microsoft在2年后提出了OLE2.0,在这个新版本中,微软不仅扩充了复合文档的相关功能(例如激活,拖放,链接与嵌入等),而且开创新的提出了COM(Component Objiect Module,对象组件模型)的思想。

  在了解COM之前,我们先来回顾一下软件工程的发展历程。软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到COM编程、面向服务的编程,目标只有一个,就是希望软件能像积木一样磊起来,像汽车一样组装起来。在这个过程中,处处透露着标准化,模块化和重用思想。这是人们认识世界的一个愿景,也是左右软件技术发展的一只无形之手。

  结构化编程方式:模块化和重用的粒度是事物之间的联系。它并不关注事物本身;通常事物本身量变到质变都需要一段时间来累积,但是联系则是很有可能随时发生改变的,联系一变,在面向结构的编程中,这就是翻天覆地的变化。

  面向对象编程方式,模块化和重用的粒度是事物(对象)。随着计算机的普及,软件设计的领域越来越多,设计的问题也越来越复杂,只关注事物之间的联系已经远远不够。每个事物都有其固有的属性,都有其固有的行为,这些都是事物本身所固有的东西,而面向对象的方法就是描述出这种稳定的东西。使用了面向对象的方法,我们就可以以不变应万变,轻松面对各种软件的变化。

  面向组件编程方式,模块化和重用的粒度是组件(乃至是某种服务)。搭积木式的软件构造方法的基础是有各式各样可重用的部件、模块。但是面向对象的方法产生的直接结果是许多的类。面向对象方法的问题就是在于这个重用的方法;类库的重用是基于源码的方式;它限制了编程语言,也就限制了重用的范围。为了达到跨语言,跨平台的目的,组件、服务的思想被提了出来。

  好了,主角出场了。COM组件思想的基本出发点是,让某个软件通过一个通用的结构为另一个软件提供服务。在这个模型中,对象模型完全独立于编程语言。COM对象可以看作是软件发布与部署的结果,即可以把它看作是软件的最后展现和存在形式,它按照一定的面向对象的形式,组合成可以交互的过程和支持库。COM对象可以用不同的语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。但是从使用端看,它们无任何区别。这样一个通用的处理技巧非常有用。甚至连应用与本机OS进行交互的方法也可以用COM来指定,例如在Windows和Windows NT中用的新API,多数是作为COM对象来定义的。可见,COM虽然起源于复合文档,但却可有效地适用于许多软件问题,它毕竟是处在底层的基础技术。用一句话来说,COM是独立于语言的组件体系结构,可以让组件间相互通信。  

  COM是源于OLE的需求,但它与复合文档间并没有多大的关系,它的第一个使用者是OLE2.0。实际上,后来COM就作为与复合文档完全无关的技术,开始被广泛应用。但是COM并不是产品,它需要一个商标名称。而最初OLE1.0过于狭窄的应用(基本只应用于复合文档)使得微软必须选择一个全新的商标来作为名称,于是ActiveX来到了地球。ActiveX是指宽松定义的、基于COM的技术集合,而OLE仍然仅指复合文档。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以提供进一步的网络应用与用户交互为主。

  发展才是硬道理,这个唯物辩证法最核心的理论告诉我们,这个编程的发展不会因为COM而停滞不前,很快COM的问题暴露(比如过于依赖注册表),于是新的技术与实践出现了,包括DCOM、COM+以及.NET平台在内的大量新新技术迅速出现和普及;这些不是我这里的重点,但是当你了解了这一切以后,你会发现很多问题,你已经看清了他们的底牌,无疑这是很重要的。

 

二、ODBC、OLEDB、DAO、RDO与ADO

  了解完编程思想的发展历史,我们再了解一下数据访问的历史。

  首先,我还是给出一个总体的概念:

  • 从出现的时间上讲,从早到晚依次是:ODBC—>OLE DB—>DAO—>RDO—>ADO;
  • 从处于的层次看(非绝对,部分有交叉)从底层到高层依次是:ODBC<OLE DB<RDO、DAO、ADO。

Excel VBA 学习总结 - 数据访问方式小结

  • 从作用上来说,都是MDAC(Microsoft Data Access Components)微软数据库访问组件的成员。

下面简单总结一下各种访问方式:

1、ODBC
  ODBC(全称Open Database Connectivity)在底层建立了一组数据访问规范(标准),并提供一组对数据库访问的标准API函数接口。应用程序可以通过ODBC访问用户具有ODBC驱动程序的任何本地或远程数据源,一般是SQL Server、Oracle等关系数据库,不能访问非关系型数据库。它最接近底层,执行效率最高,但是开发效率比较低。

2、OLEDB

  OLE DB是基于COM技术的一组接口规范,是系统级数据访问接口,OLE DB提供通用数据访问的方式,不管数据是以何种形式存储,可以对电子邮件、文本文件、复合文件、数据表等各种各样的数据通过统一的接口进行存取的一种技术。可以用来访问各种关系型或者非关系型数据源,如ORACLE、SQL Server、Access、Excel等等。它比较接近底层,执行效率比较高,开发效率也有一定提升。

3、DAO

  DAO(全称Data Access Objects)是基于MICROSOFT的JET 技术设计的面向对象的数据访问接口,最早在VB中使用,DAO可以访问的数据库有早期的Access、FoxPro、dBASE、Paradox、Excel和Lotus WK等数据库。

4、RDO

  RDO(全称Remote Data Objects,远程数据对象访问)是以ODBC为基础,依赖ODBC API、选定的ODBC 驱动程序以及后端数据库引擎实现大部分的功能,RDO具备基本的ODBC处理方法,所以可以直接执行大多数ODBC API函数。RDO是从DAO派生的,同DAO最大的不同在于其数据库处理模式。DAO是针对Records和Fields,而RDO是按照Rows和Columns来处理。此外DAO是访问Access的Jet引擎 (Jet是ISAM)的接口,而RDO则是访问ODBC的接口。可见,RDO是综合了DAO/Jet、ODBC等优点。

5、ADO

  ADO(全称ActiveX Data Objects)是基于OLE DB(COM技术)技术设计的应用层数据访问接口,对OLE DB接口进行封装,所以使用中仍然是通过OLE DB桥接数据库。所以,ADO同OEL DB一样提供了通用数据访问功能,支持关系数据库和非关系数据库的访问。ADO功能上对DAO和RDO进行了批判吸收,达到了效率与开发的折中。

  各种数据访问技术综合对比如下:

----------------------------------------------------------------------------------------
访问接口    易用性  运行性能  可扩展性      突出特点    能否访问非关系数据源  技术层次
----------------------------------------------------------------------------------------

ODBC       差         最高        差        可进行底层控制                否                   底层
----------------------------------------------------------------------------------------
OLE DB     较差       较高        好        可访问非关系DB              能                  底层
----------------------------------------------------------------------------------------
DAO        好         较高        一般       通用标准,应用广泛          否                  高层
----------------------------------------------------------------------------------------
RDO         好         较高       一般       访问JET性能最好             能                   高层
----------------------------------------------------------------------------------------
ADO        最好        高           好        优秀执行效率与开发效率    能                  高层
----------------------------------------------------------------------------------------

综上所述,ADO是平衡了了执行效率与开发效率,综合了各种数据访问方式优点的数据访问方式;同时也是微软推荐的数据访问方式。