AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VB编程

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

51自学网 http://www.wanshiok.com


理解为什么使用Implements声明是件有益的事,假设你将使用一个新的OLE DB控件,如:Microsoft DataGridControl 6.0(OLEDB).如果这个控件跟一个数据觉察类绑定并显示从该类返回的数据.当这控件需要改变自身时,它知道应该调用OLEDBSimpleProvider的getVarient方法.getVarient从特定的数据存储那里返回数据.当用户滚动显示DataGridControl中的新的一行时,它是被自动调用的.通过重写该方法,你可以完全控制怎么有其他数据存储的情况下从特定的数据存储那里返回和提取数据.当你采用这种灵活的方法,你仍将保留自动执行的好处,比如说在数据绑定OLE DB控件删除一行时.此外,你还可以控制行是怎么被删掉的.好处是明显的:在提供者当中的代码仍然在很大程度上保留了对你关联的数据存储类型的无关性.换而言之,由于你用了Implement关键字,OLE DB调用了你的方法,(如deleteRows),并且是你的代码执行这些方法.

如果你仔细的看了例程中的类模块,你将注意到MyStandardClass的DataSourceBehaior属性是置0的.这个类不是数据觉察的,但是其很多代码实际上是对驻留在MyStandardClass中的数据进行操作的.你可以把这些代码包括进MyOLEDBProvider类,但是把这些代码写到它自己的类中是个更好的设计方法,因为这样把应用程序按逻辑功能上进行了分离.当然,从功能上说,无论把这些代码象本例程一样保留在标准模块中还是写到诸如MyOLEDBProvider的数据觉察类中是没有什么分别的.

你也需要在MyStandardClass声明部分加上如下一行以声明一个监听者变量:

Dim MyOLEDBSimpleProviderListener AS _OLEDBSimpleProviderListener

你将用MyOLEDBSimpleProviderListener变量作为事件的驱动器以通知对象如绑定控件,当该变量的值改变时控件将对它们自身进行刷新.如果你记得数据是存储在一个规则的二维阵列中的话,那么这一能力是非常显著的.

为了让监听者工作,你还得创建监听者,存储监听者,并在数据改变时通知监听者.创建监听者用到这个过程:

Private Sub OLEDBSimpleProvider addOLEDBSimpleProviderListener(ByValposIListeng As MSDAOSP.OLEDBSimpleProvider Listener)

‘添加一个成员到监听者中

‘收集

If Not (pospIListener Is Nothing) Then

SetMyOLEDBSimpleProvider

Listener= pospIListener

colListener.Add MyOLEDBSimpleProvider _Listener

End If

End Sub

当你开始应用程序时OLE DB将自动调用这个过程.而且它将传递一个引用给一个监听者对象(OLEDBSimpleProviderListener).你可以存储该引用并在数据改变的时候使用它.举例说:这代码调用每个OLEDBSimpleProviderListener的deleteRows方法表明有多少行已经被删了:

‘我们已删了上述的行

‘给colListener集中的每个OLEDBSimpleProviderListener发消息

For Each vCurrentListener In colListeners

Set MyOSPListener = vCurrentListener

MyOSPListener.deletedRows iRow,cRows

Next

由于MyOLEDBProvider的DataSourceBehavior属性的值是2(vbOLEDBProvider),该类同时作为数据源和OLE DB提供者.设属性的值为1(vbDataSource)或2(vbOLEDBProvider)将使类的过程列表框中自动出现两个额外的事件.DataConnection在数据源跟一个OLE DB Simple提供者连接时被激活.在数据使用者申请一个新的数据源时GetDataMember事件被激活.在这应用程序中,当你将MyOLEDBProvider提供的数据跟OLE DB数据绑定栅格连接时,GetDataMember被激活:

Set DataGrid2.DataSource = MyDataAdapter

这行在主窗体的Form_Load事件过程中执行:

Dim MyDataAdapter As New DataAdapter

Dim MyDataProvider As New MyOLEDBProvider

Private Sub Form_Load()

  Imagel.Picture = LoadPicture(App.Path & “/MyLogo.gif”)

‘设DataAdapter的对象属性为MyOLEDBProvider对象

Set MyDataAdapter.Object = MyDataProvider

‘为栅格设定DataMember属性

DataGride2.DataMember = App.Path & “/Cumtomer.txt”

‘设定DataSource为DataAdapter

Set DataGrid2.DataSource = MyDataAdapter

DisplayCurrentRecords

End Sub

在Form_Load事件过程中,请注意MyDataAdapter.MyDataAdapter是个DataAdapter对象,它的作用是作为OLE DB和OSP的转换层.你得用Project|References对话框为DataConsumer添加指向Microsoft Data Adapter库的引用(见图4).

这里是GetDataMember事件的过程的代码:

Private Sub Class_GetDataMember( DataMember As String, Data As Object)

If Len(DataMember) < l Then DataMember = App.Path & “/Cumtomer.txt”

‘设定sSourceFile属性为DataMember

MySC.sSourceFile = DataMember

‘移植类阵列

MySC.PopulateClassArray

‘设定MySC的数据为MyDataSource的数据

End Sub

DataMember的输入参数是将被绑定的数据的字符串形式的数据成员的名字.在本应用程序中,该字符串包含将要加载到阵列中的文本文件的路径.PopulateClassArray方法完成读取文本文件和把数据拷贝进阵列中的任务.

在不久的将来RDO(远程数据对象)和DAO(数据访问对象)将最终不再使用,ADO将会成熟完善并很快会提供它们的所有功能.作为一个Visual Basic编程者,你应该熟悉OLE DB和ADO的强大的功能和选项.通过这个介绍和例程代码,你应该能够用自己的简单OLE DB提供者来创建数据觉察类.好运!

 
 

上一篇:VB与MS-Draw开发通用作图软件  下一篇:插入对象