Vb通过OO4O访问Oracle的总结(一)

忘记是谁说的了,当没什么新东西可写的时候,就是该总结的时候了。自从一进公司,我就一直做着用vb通过OO4O读写数据库的工作。对OO4O也多少有些了解了,参考着前人的文章,我也总结一下,不然总让我的博客空着也不大好看。好了,咱们言归正传。

OO4OOracle Object for OLE,是一组软件层,通过调用Oracle的接口来与Oracle会话。

其设计目的是使与微软 COM 自动化和 ActiveX 兼容的语言直接访问 Oracle 数据库,这些语言包括 Visual BasicVisual Basic for Application (VBA)IIS Active Server PagesASP)、Windows 脚本宿主和 Visual C++(在这里我们只讲一下用vb如何实现)。这些层是直接在 Oracle Call InterfaceOCI)上编写的,绕过了标准的 ODBCOLE DB ADO 层。虽然使用它创建的应用程序在使用其它数据库的时候会不兼容,但是它却能够直接地访问 Oracle 数据库,而且能够更广地访问 Oracle 数据库这是其他任何数据库访问方式很难达到的。但它也有不足:

·在某些实例中,它的速度不是最快的。部分原因是因为它是一种进程中的服务程序。

·OO4O不支持异步操作或事件。

·OO4O不支持GetRows方式。OO4O主要被设计用于可更新动态集。

(参见《几种用VB访问Oracle数据库技术的比较西安市雁塔路中段1号二室 郑浩 马晓锋 江振治)

 

使用这一技术,我们在 VB 中不用任何控件就可轻松访问 Oracle 数据库的内容,当然前提是你必须安装了Oracle Oracle Object for OLEOracle 的客户端或 Personal Oracle,否则会得到无法建立对象的错误信息。对于OO4O的简单操作,可以参考前人的文章。

http://www.dbonline.cn/source/oracle/20040216/OTHER_access%20Oracle%20database%20using%20OLE(1).html

http://www.dbonline.cn/source/oracle/20040216/OTHER_access%20Oracle%20database%20using%20OLE(2).html

这里为了大家看着方便,和文章的连贯性,我就直接搬来了。

 

我们要建立与 Oracle 数据库的联接这里我们使用到两个对象 OraSession 对象和 OraDatabase 对象。 OraSession 对象用于管理 OraDatabase 对象,使用 OraSession 对象的 OpenDatabase 方法可以建立 OraDatabase 对象,同时建立与 Oracle 数据库的联接以访问数据库的内容。下面的例子演示了如何使用 OraSession 对象和 OraDatabase 对象建立与 Oracle 数据库的联接:

Private Sub Command_Click()

Dim OraSession As Object

Dim OraDatabase As Object

Dim Ls_username As String, Ls_password As String, Ls_server As String

 

Ls_server = "" ' 联接本地 Oracle 数据库

Ls_username = "system"

' 用户名为 system

Ls_password = "manager"

' 密码为 manager 建立 OraSession 对象

Set OraSession = CreateObject("OracleInProcServer.XOraSession")

' 错误处理

On Error GoTo Connect_Err:

' 建立 OraDatabase 对象以联接到 Oracle 数据库

Set OraDatabase = OraSession.DbOpenDatabase(Ls_server, Ls_username + "/" + Ls_password, 0&&)

MsgBox " 数据库联接成功 ", vbOKOnly + vbInformation, " 提示信息 "

On Error GoTo 0

Exit Sub

Connect_err:

If InStr(OraSession.LastServerErrText, "ORA-01017") Then

MsgBox " 无效的用户名和密码,数据库联接不成功! ", vbOKOnly + vbCritical, " 提示信息 "

Else

MsgBox " 数据库联接不成功!请查看下面的出错信息: "+Chr(13)+OraSession.LastServerErrText, vbOKOnly + vbCritical, " 提示信息 "

End If

End Sub

 

建立了数据库联接后我们就可以运行相应的 SQL 命令对数据库的内容进行相应的操作了。对于非查询 SQL 命令(非 SELECT 命令),可以使用 OraDatabase 对象的 ExecuteSQL 方法执行,而对数据库的查询则可使用 OraDatabase 对象的 CreateDynaset 方法建立 OraDynaset 对象来执行查询,然后建立 OraFields 对象对查询结果进行检索。下面我们分别举例演示如何新建一个用户然后查询并列出 DBA_USERS 视图中 USERNAME 字段的内容,程序如下:

Private Sub Command_Click()

 

Dim OraSession As Object

Dim OraDatabase As Object

Dim OraDynaset As Object

Dim OraFields As Object

Dim Ls_username As String, Ls_password As String, Ls_server As String

Dim Ls_mess As String

Dim Li_I As Integer

 

Ls_server = ""

' 联接本地 Oracle 数据库

Ls_username = "system"

' 用户名为 system

Ls_password = "manager"

' 密码为 manager

Set OraSession = CreateObject("OracleInProcServer.XOraSession")

On Error GoTo Connect_Err:

Set OraDatabase = OraSession.DbOpenDatabase(Ls_server, Ls_username + "/" + Ls_password, 0&&)

 

' 执行 SQL 命令出错后跳转到 Sql_err

On Error GoTo Sql_err:

Set OraDynaset = OraDatabase.DbCreateDynaset("SELECT USERNAME FROM DBA_USERS", 0&&)

 

If OraDynaset.RecordCount 0 Then

' 建立 OraFields 对象对查询的内容进行检索

Set OraFields = OraDynaset.Fields

Ls_mess = 用户列表 + Chr(13)

Ls_mess = Ls_mess + OraFields( USERNAME ).Value 此处也可以直接用OraFields(0).Value

for Li_I = 1 to OraDynaset.RecordCount - 1

OraDynaset. MoveNext

Ls_mess = Ls_mess + Chr(13) + OraFields( USERNAME ).Value

Next Li_I

MsgBox Ls_mess , vbOKOnly + vbInformation, " 查询结果 "

Else

MsgBox " 未查询到相应信息 ", vbOKOnly + vbInformation, " 提示信息 "

End If

' 创建新用户 TEST 密码为 TEST

OraDatabase.ExecuteSQL ("CREATE USER TEST IDENTIFIED BY TEST")

MsgBox " 用户创建成功 ", vbOKOnly + vbInformation, " 提示信息 "

Set OraDynaset = OraDatabase.DbCreateDynaset("SELECT USERNAME FROM DBA_USERS", 0&&)

 

If OraDynaset.RecordCount 0 Then

' 建立 OraFields 对象对查询的内容进行检索

Set OraFields = OraDynaset.Fields

Ls_mess = 用户列表 + Chr(13)

Ls_mess = Ls_mess + OraFields( USERNAME ).Value

for Li_I = 1 to OraDynaset.RecordCount - 1

OraDynaset. MoveNext

Ls_mess = Ls_mess + Chr(13) + OraFields( USERNAME ).Value

Next Li_I

MsgBox Ls_mess , vbOKOnly + vbInformation, " 用户建立后查询结果 "

Else

MsgBox " 未查询到相应信息 ", vbOKOnly + vbInformation, " 提示信息 "

End If

Exit Sub

 

Connect_err:

If InStr(OraSession.LastServerErrText, "ORA-01017") Then

MsgBox " 无效的用户名和密码,数据库联接不成功! ", vbOKOnly + vbCritical, " 提示信息 "

Else

MsgBox " 数据库联接不成功请查看下面的出错信息 " +Chr(13) + OraSession.LastServerErrText, vbOKOnly + vbCritical, " 提示信息 "

End If

Exit Sub

Sql_err:

If OraDatabase.LastServerErr <> 0 Then

MsgBox " 数据库操作出错请查看下面的出错信息 " + Chr(13) + OraDatabase.LastServerErrText, vbOKOnly + vbCritical, " 提示信息 "

End If

End Sub

因为上面的对数据库的写操作没有提交,因此程序结束后,数据库内容没有改变,若要改变需要在写操作之前加上OraSession.BeginTrans,写操作之后加上OraSession.CommitTransOraSession.Rollback

经过上面两个例子,相信大家对OO4O都有了一定的了解,面我再来说一下对于调用用户自定义数据库函数的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值