北京计算机学院信息所(100044)余正
在Visual Basic中用OLE Automation方法访问Oracle数据库,其可行性可从两方面加以分析。
在Server端,Oracle提供了如Sql *Plus、Sql*Form、Sql*Report、Pro*C等应用程序开发界面。
但是,考虑到微软产品在当前市场上的地位,如能提供诸如Visual C++,Visual Basic程序对Oracle数据库的访问接口,则可节省相当人力,
Oracle 7.3的Objectsfor OLE工具包即是基于这种考虑,该工具包支持OLE Automation方法,这就给在VB中用OLE Automation方法访问Oracle提供了可能性。
在VB方面,即Client端,访问数据库的方法有多种,比如DAO(Data Access Object)、RDO(Remote Data Object)、OLE Automation、OCX等。
其中DAO和RDO类似,都支持用代码编程来对数据库进行存取,通过ODBC驱动,因此可用作编写后台存储函数的工具;
OCX的内核是一些可被重用的对象,但是并不支持用代码直接访问数据库,而是通过数据通道控件和一些附加的捆绑控件来达到访问数据库的目的。但是,尽管如此,OLE Automation仍然以它编程简单方便而独具特色。
具体来说,Oracle的Objects for OLE工具包定义了一系列的可编程对象,其中最主要的是OraSession、OraDatabase、OraDynaset等几种,
分别代表了数据库连接、逻辑数据库和动态数据集(视图)概念。其中又以OraSession对象尤为重要,因为它是与数据库连接的第一个需要被VB创建的对象,而其它对象皆可由它派生出来。
下面是一些常见的对数据库操作的例子。
假定测试数据库连接串为"sei_pipe",当前用户名为"yzh",口令为"yyyyyy",一个用做测试的表为"Member",其结构如下:
Name char(20),Age Integer,Address char(30)。
例1:创建数据库连接及数据库对象
‘ / 定义OraSession和OraDatabase为OLE对象
Dim OraDatabase As Object
‘ / 创建一个OraSession对象
Set OraSession = CreateObject ( " OracleInProcServer. XOraSession " )
‘ / 通过打开一个对Oracle的连接创建数据库对象
Set OraDatabase = OraSession.DbOpenDatabase( " sei_pipe " , " yzh/yyyyyy " , 0 & )
例2:创建动态数据集对象
‘ / 定义OraDynaset为OLE对象
‘ / 创建由SQL语句选出的动态数据集
Set OraDynaset = OraDatabase.DbCreateDynaset( " select *from Member " , 0 & )
例3:从动态数据集中读取当前记录
Age变量 = OraDynaset.Fields( " Age " ).value
Address变量 = OraDynaset.Fields( " Address " ).value
例4:向数据库中追加记录
‘ / 定义新增记录中各字段的数据类型
Dim Age As Integer
Dim Address As String
Name = " wang ping "
‘ / 初始化记录
Age = 24
Address = " Beijing "
OraDynaset.AddNew
‘ / 向动态数据集中加记录
OraDynaset!Name = Name
OraDynaset!Age = Age
OraDynaset!Address = Address
OraDynaset.Update
例5:事务处理
OraDynaset.AddNew ‘ / 向动态数据集中添加记录
OraDynaset!Name = Name ‘ / 此操作被当作一个事务
OraDynaset!Age = Age
OraDynaset!Address = Address
OraDynaset.Update
OraSession.CommitTrans
‘ / 递交一个交易,以使添加记录有效
‘ / 或者
OraSession.RollbackTrans
‘ / 撤消一个交易,使添加记录无效
例6:断开与Oracle数据库的连接
可以看到,在VB中用OLE Automation方法访问Oracle,除了一般的增、删、改、查操作之外,也支持大型数据库的一些特点,比如基于事务操作等。
而且,在VB中创建OraSession对象之后,对数据库的所有操作都被看成是对OraSession对象及其派生对象的属性存取和方法的使用。
即便是一个对Oracle很生疏的用户,也能通过帮助文件很快掌握访问数据库的方法,因此程序员所要做的工作变得很简单。