oracle vbcs,在VB中如何使用OO4O技术对ORACLE数据库进行操作[转]

在VB中如何使用OO4O技术对ORACLE数据库进行操作[转]

(2013-12-26 15:35:53)

http://softnote.blog.sohu.com/69105421.html

摘要: 本文结合实例介绍了在VB中如何使用OO4O技术对ORACLE数据库进行操作。

关键词: ORACLE, VB,OO4O,ODBC。

1. 引言

一般来说,VB访问远程后台数据库有好多方法可以实现,目前使用的比较多的方法有:ODBC(开放数据库互联),OO4O(Oracle的OLE对象)

由于ODBC技术有一个致命的缺点—速度慢。OO4O是一种进程中的OLE服务器,但是它不使用ODBC标准,

它利用ORACLE的调用接口来与ORACLE会话,这样一来,它就可以克服ODBC的速度慢的缺点了。

正是由于OO4O访问ORACLE的这种特殊优势,目前基于ORACLE数据库的用VB程序语言开发的应用系统基本上都是通过OO4O来实现的。

2. OO4O简介

2.1 VB 中用到的OO4O的重要的组件( OO4O Component Used in VB)

Oracle Data Control (在建立VB工程时,必须把它们加载到VB的引用中)

2.2 OO4O主要对象,用途及对象的建立:

⑴ OraClient:

定义工作域,并管理会话集。和DAO的DBEngine建立方式一样, OraClient对象通常系统会根据需要而自动建立。

⑵ OraSession:

VB应用程序和ORACLE服务器的接口,每个应用程序会建立自己的OraSession对象。OraSession对象是属于应用程序中最上层的对象,它以通过CreateObject方法(method)来建立,建立方法为:

Set OraSession =

CreateObject("OracleInProcServer.XoraSession")。

用OaSession = nothing释放OraSession对象。

⑶ OraConnection:

是OraSession与ORACLE数据之间建立的连接。当建立OraDatabase对象时,系统会自动产生一个OraConnection对象。反之,当用户或应用程序与数据库失去连接,则OraConnection对象也会自动被释放(free)。

⑷ OraDatabase:

对ORACLE数据库的一个“虚”登录。其登录数据库的方法如下:

Set OraDatabase =

OraSession.DbOpenDatabase("数据库别名","用户名/密码",0)

⑸ OraParameter:

绑定在SQL语句或PL/SQL块中的有关变量。OraParameter对象间接的通过OraDatabase对象的OraParameters数据集合(collection)来增加、存取或删除某个变量。

⑹ OraDynaset:

利用SELECT语句所得到的记录。在VB中如果想建立一个OraDynaset对象可以使用OraDatabase的DbCreateDynaset或CreateDynaset等方法,建立方法为:

Set OraDynaset = OraDatabase.DbCreateDynaset("select * from

dual",0) 。

⑺ OraSQLStmt:

预定义的单独的一句SQL语句。ORACLE中对数据库的操作基本上都是基于SQL来实现的。通过OO4O对ORACLE的访问,也得考虑怎样有效利用

SQL来实现.前面已经提到过SELECT的查询可以利用OraDynaset

来实现表形式的获得,但是INSERT,UPDATE这样的SQL最好通过OraSQLStmt 来实现。

⑻ OraField:

OraDynaset对象中的一列(Column)或数据项目(data

item)。OraField对象是间接从OraDynaset对象的OraFields数据集合(collection)取得其中的一个字段的数据,其数据类型通常为万能变量(Variant)。

2.3 OO4O对象关系图:(OO4O Objects Relationship)

图 1 OO4O对象关系图

2.4 OO4O中各个对象的关系如下:

每个OraClient对象可以关系多个OraSession对象,而每个OraSession对象只会属于或对应于一个OraClient对象。

每一个OraSession对象可以关系多个OraConnection对象,而每一个OraConnection对象也可以同时被多个OraDatabase对象所分享。然而,这些OraDatabase对象必须属于相同的OraSession对象。

● 每个OraDatabase对象属于唯一的OraSession对象。

● 每个OraDynaset对象属于唯一的OraDatabase对象。

● 每个OraSQLstmt对象属于唯一的OraDatabase对象。

● 每个OraParameter对象属于唯一的OraDatabase对象。

● 每个OraField对象属于唯一的OraDynaset对象。

3. VB中利用OO4O对ORACLE的访问实例

3.1 系统构成实例

图 2 OO4O系统构成

3.2 OO4O使用前的准备

为了在VB中从OO4O连接ORACLE数据库,连接用的SERVICE名必须已经在ORACLE的TNSNAME.ORA中定义好了。这种定义是由Net8

Configuration Assistance来完成的。

运行tnsping.exe后会得到以下的执行结果

C:\Oracle\Ora81\bin>tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 8.1.6.0.0 - Production

on 20-SEP-20 02 16:01:28 (c) Copyright 1997 Oracle Corporation。All

rights reserved。Attempting to contact

(ADDRESS=(PROTOCOL=TCP)(HOST=rnk2000)(PORT=1521)) OK (70ms)

在安装OO4O的目录下有VB用的ORACLE文件[ORACONST.TXT],把这个文件名换成[ORACONST.BAS]然后到VB所在的目录。

[ORACONST.TXT]文件的内容大致如下:

Global Const ORADATA_EDITNONE = 0

Global Const ORADATA_EDITMODE = 1

Global Const ORADATA_EDITADD = 2

Global Const ORADB_BOOLEAN = 1

Global Const ORADB_BYTE = 2

Global Const ORADB_INTEGER = 3

3.3 和ORACLE之间的连接,操作,切断实例

OraSession对象,OraDataBase对象,OraDynaset对象,OraField对象实例介绍:

Option Explicit

'ORACLE对象定义

Public OraSession As Object ' Oracle OraSession对象

Public OraDB As Object ' Oracle OraDataBase对象

Private fOraSess As Boolean ' Session设置标签

Private fOraDB As Boolean ' DataBase Open设置标签

'

Private Sub Form_Load()

'显示"连接中…"信息窗口

Load frmLogin

FrmLogin.Show

DoEvents

'调用ORACLE连接函数

If Ora_Open() = False Then

MsgBox "连接ORACLE失败。"

Else

'调用系统时间获得函数

Ora_GetDate()

End If

'放弃"连接中…"信息窗口

Unload frmLogin

End Sub

Private Sub Form_Unload(Cancel As Integer)

'调用ORACLE释放函数

If Ora_Close() = False Then

MsgBox "释放ORACLE连接失败。"

End If

End Sub

' 名称 : Ora_Open

' 功能 : 打开数据库

' 参数 : 没有

' 返回值 : True(正常) , False(异常)

Public Function Ora_Open() As Boolean

On Error GoTo Ora_Open_Err

Dim pstrErr As String

Ora_Open = False

Screen.MousePointer = vbHourglass

If fOraSess = False Then

'生成Session对象

Set OseOraSess = CreateObject("OracleInProcServer.XOraSess")

fOraSess = True

'ORACLE 数据库的Longin

Set OdbOraDB = OseOraSess.OpenDatabase("TZCE", "SCOTT/TIGER",

标ORADB_DEFAULT)

fOraDB = True

End If

Ora_Open_Exit:

Ora_Open = True

Screen.MousePointer = vbDefault

Exit Function

Ora_Open_Err:

Screen.MousePointer = vbDefault

'出错处理

If OraSess.LastServerErr = 0 Then

If OraDB.LastServerErr = 0 Then

'VB出错

pstrErr = Error(Err.Number)

Else

'数据库出错

pstrErr = OraDB.LastServerErrText

OraDB.LastServerErrReset

End If

Else

'Session出错

pstrErr = OraSess.LastServerErrText

OraSess.LastServerErrReset

End If

'错误显示

MsgBox pstrErr, vbOKOnly, "Ora_Open"

On Error Resume Next

End Function

' 名称 : Ora_Close

' 功能 : 关闭数据库

' 参数 : 没有

' 返回值 : True(正常) , False(异常)

Public Function Ora_Close() As Boolean

On Error GoTo Ora_Close_Err

Dim pstrErr As String

Ora_Close = False

If fOraDB = True Then

'关闭数据库

OraDB.Close

'解除OraDataBase对象

Set OraDB = Nothing

End If

If fOraSess = True Then

'解除OraSession对象

Set OraSess = Nothing

End If

ExitHandler:

Ora_Close = True

Exit Function

Ora_Close_Err:

'出错处理(和Ora_Open出错处理类似,略)

End Function

' 名称 : Ora_GetDate

' 功能 : 获取数据库时间

' 参数 : 没有

' 返回值 : True(正常) , False(异常)

Public Function Ora_GetDate() As String

On Error GoTo Ora_GetDate_Err

Dim pstrErr As String

Dim pstrSQL As String

Dim pobjDyn As Object 'OraDynaset对象

Ora_GetDate = ""

pstrSQL = "SELECT SYSDATE FROM DUAL"

'打开OraDynaset对象

Set pobjDyn = OraDB.CreateDynaset(pstrSQL, ORADYN_READONLY)

'保存结果

Ora_GetDate = pobjDyn.Fields("SYSDATE").Value

'关闭OraDynaset对象

Set pobjDyn = Nothing

ExitHandler:

Exit Function

Ora_GetDate_Err:

'出错处理(和Ora_Open出错处理类似,略)

End Function

以下にサンプルをご提供します。参考にして下さい。

尚、関数の詳細は、oo4oを使用するVBの専門書か又は、Webで調べて下さい。

' Oracleに接続

Set OraSession =

CreateObject("OracleInProcServer.XOraSession")

Set OraDatabase = OraSession.DbOpenDatabase("cims", "test/test",

0&)

'パラメータの型

Const ORAPARM_INPUT = 1

Const ORAPARM_OUTPUT = 2

Const ORAPARM_BOTH = 3

Const ORATYPE_VARCHAR2 = 1

Const ORATYPE_NUMBER = 2

' SQL実行に使用するVB変数

Dim v_sqlstmt As String

Dim v_retcode As Integer

'パラメータのバインド

OraDatabase.Parameters.Add "P1", "", ORAPARM_INPUT

OraDatabase.Parameters("P1").serverType = ORATYPE_VARCHAR2

OraDatabase.Parameters("P1").Value = "1"

OraDatabase.Parameters.Add "P2", "", ORAPARM_INPUT

OraDatabase.Parameters("P2").serverType = ORATYPE_NUMBER

OraDatabase.Parameters("P2").Value = "1"

OraDatabase.Parameters.Add "P3", "", ORAPARM_OUTPUT

OraDatabase.Parameters("P3").serverType = ORATYPE_NUMBER

OraDatabase.Parameters("P3").MinimumSize = 2

'PL/SQLブロックからプロシージャを呼ぶ

v_sqlstmt = "begin test.main(:P1, :P2, :P3); end;"

v_retcode = OraDatabase.ExecuteSQL(v_sqlstmt)

' 返り値を表示

MsgBox OraDatabase.Parameters("P1").Value

MsgBox OraDatabase.Parameters("P2").Value

MsgBox OraDatabase.Parameters("P3").Value

'パラメータリストからパラメータを削除

OraDatabase.Parameters.Remove "P1"

OraDatabase.Parameters.Remove "P2"

OraDatabase.Parameters.Remove "P3"

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值