创建一个简单的OLE DB提供者

2008-02-23 06:52:40来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

用VB6的新的数据觉察类来开发你自己的可以访问任意数据存储的OLE DB提供者.

查看和操纵外部数据源中的数据是VISUAL BASIC的一个最重要功能之一.但它不是总是这样的.VISUAL BASIC最初没有提供内置的对数据库的支持.即使是VISUAL BASIC 3.0也没有提供对数据库的支持,但是可以通过对你的VB3的应用程序升级,使它们也可以使用JET数据库如MICROSOFT Access.在VB6中,微软为我们提供了丰富的数据访问的手段供选择.它们包括:OLE/ADO,关系数据的ODBC,ODBC的RDO,JET数据库的DAO,ODBC数据的DAO(ODBCDirect).微软计划在将来的数据访问将主要依赖OLE DB和ADO,其他的数据访问技术将迟早过时.

OLE DB的部分吸引力,也是ADO对象的对它的要求可以归纳为:”通用数据访问”.OLE DB提供了这么一种技术:它能使你的应用程序找到并读出任意类型的企业数据存储.在本文中的数据存储指的是任意的数据源,包括关系型数据库系统SQL Server和非关系型数据库系统如平面文本文件,电子邮件和消息系统,大型机数据库和目录服务.

你可以通过OLE DB以行和列的方式访问这些数据存储,即使实际的数据并不是以行和列的格式存储的.你能以这样的方式访问数据存储的部分原因是因为OLE DB要求每种类型的数据存储都得有一个OLE DB提供者.一些OLE DB提供者是内置的;其他一些必须单独得到.内置的提供者包括Oracle的OLE DB提供者,ODBC,JET和SQL Server.每个OLE DB提供者按照OLE DB的规范进行编写:在内部,提供者处理复杂的对各自的数据存储的访问,但在外部,无论它们是何种数据类型,它们的界面都是一样的.该规范使得你无论访问多少种不同的数据源中的数据,所做的方式也都完全是一样的.

在本文中,我们将向你展示如何用VB6的新特性来创建一个简单的OLE DB提供者并如何用这提供者以行和列的格式来存取和修改数据.为简单起见,我们的例子将访问一内存队列,其内容从文本文件中读出的,但你可很容易的把该思想方法扩展到访问其他类型的数据存储.

对旧思想的新转变

你通过构造和定制一个数据觉察类来创建一个OLE DB提供者.使用数据觉察类,你能把访问几乎所有类型的数据的必要的方法,属性和事件都封装起来.

数据觉察类对于VISUAL BASIC 6.0是新的.但是如果你曾用过数据控件来连接数据库的话你就能很好的理解这一思想.就指向数据库并从中取得数据而言,数据觉察类和数据控件的功能是相似的.但数据觉察类它同时起着数据控件和数据绑定控件的作用,但它没有提供一个用户界面.它起的作用决定了它是作为一个数据源还是一个数据使用者.当它是一个数据源时,可把它当作是没有运行时用户界面的数据控件;当它是数据使用者时,把它当成是数据绑定控件,如文本框,只是没有运行时的用户界面而已.使用数据觉察类,可以使你容易的共享数据而不需要在窗体中加入实际的数据控件.

除了提供了用于访问外部数据源的接口外,数据觉察类的的行为跟一个标准的类模块是很相似的.有一个属性—DataSourceBehavior决定了一个类是否是数据觉察的. DataSourceBehavior有三个值:0,1,2.你可以看到这些常量在VB的数据觉察项列表中分别是这样对应的:

vbNone对应0;vbDataSource对应1;vbOLEDBProvider对应2.当DataSourceBehavior属性的值设为0(vbNone)时,这类不是数据觉察的;当属性的值设为1(vbDataSource),类起的是数据源的作用;当属性的值设为2(vbOLEDBProvider)时,类起的是数据源和OLE DB提供者的作用.这项设置仅对公有类有效.

你可以通过另外一个属性—DatbindingBehavior来影响数据觉察类与数据的相互作用.这个属性的可能的值有1和2,分别对应常量vbSimpleBound和vbComplexBound,该属性决定了数据觉察类跟外部数据的绑定方式.简单绑定类只跟一个单一的域绑定;而复杂绑定类则跟整个一组行和列绑定.简单绑定等同与跟文本框绑定,而复杂绑定等同与跟grid控件绑定.

关于OSP

在数据觉察类和数据存储间还存在着OSP(即OLEDBSimpleProvider),它用来解决OLE DB的复杂性.OSP,作为一个界面,要完成如下任务:执行用来进行数据访问的方法;定义查找,刷新,搜索记录的方法.它提供了诸如:getRowCount,getColumnCount,insertRows和deleteRows等方法.在例程中的OSP为简单的数据存储提供服务,它可以在非内存队列中很好的工作.

OSP所指向的记录中的项是用先行后列的方式表示的.如:第一行中的第一个域可用1,1表示.第5行第3列对应的项用5,3表示.OPS保留一些数字具有特殊含义:-1表示一行或列中的所有值.如:-1,2表示2列中的所有项.另外一个保留数是0,它表示数字区外的区域,通常指列的头和行标.

由于你用了OLEDBSimpleProvider界面,所以你还应该包括进OLEDBSimpleProviderListener.它监听着数据的任何改变并通知对象,如OLE DB数据绑定控件,刷新它们的数据. OLEDBSimpleProviderListener提供了描述当前改变过程的状态的方法,如:aboutToChangCell,aboutToDeleteRows,aboutToInertRows,cellChanged,insertedRows,rowsAvailable和transferComplete.

例程中在MyDataSourceproject下有一个数据觉察类模块和一个标准的类模块.MyDataconsumer,一个标准的可执行的工程作为数据使用者,它用的是MyDataSource提供的数据.由于VB6允许你同时加载多个工程到工程管理器中,所以同时加载这两个工程到一个工程组中(见图1).

MyDataSource工程,它作为你的数据源,提供数据给你的数据使用者MyDataConsumer工程.MyDataSource的核心是一个叫MyOLEDBProvider的数据觉察类.(见图2).DataBindingBehavior属性的值置0—vbNone,告诉Visual Basic这个类不是数据使用者.DatasourceBehavior属性置2—vbOLEDBProvider,告诉Visual Basic这个类将会是一个数据源和一个OLE DB提供者.在这工程中,你将对一个简单的数据存储使用一个OLE DB提供者.这个简单的数据存储是存在内存中的阵列.

当你通过设定数据觉察类的属性来创建一个提供者时,你的应用程序访问一个关系型数据库系统跟访问二维的阵列中的数据是相似的.如果那个简单的二维阵列没有提供关系型数据库管理系统(RDBMS)的复杂特性,你一定想知道怎么编写代码使得可以在两种类型的数据存储下有效的工作.换而言之,如果你的应用程序必须在相同的方式下对两者操作,你怎么编写代码既利用了RDBMS的特性,又没有超出简单阵列的能力范围?在编程过程中是否会通过避免使用RDBMS的高级特性而削弱RDBMS的高级特性?一句话,不会.你可以通过使用Microsoft OLE DB Simple Provider 1.5库.

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB创建自己的通信程序

下一篇:VB中对字符串的处理及其扩展