在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"
分享:
喜欢
0
赠金笔
加载中,请稍候......