分享
 
 
 

OO40编程教程

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

OO4O应用

Oracle Object for OLE(OO4O)是一个进程内OLE自动化服务器,它实现了一组用于连接ORACLE数据服务器和执行查询及处理结果的对象和接口。OO4O是特别为与ORACLE数据库协同工作而开发并发展起来的,并且其实现并不依赖于使用ODBC API。这种非依赖性使得OO4O能提供访问ORACLE独有特性的优化的API。当然,如果你想使用OO4O,必须在你的机器里装上ORACLE的net8。

1.应用初步

先来看一下下面的小程序(VB)

Dim OracleDBSession As Object

Dim SecDB As Object

Dim Sec As Object

Dim SecRecord As Object

Set OracleDBSession = CreateObject("OracleInProcServer.XOraSession")

Set SecDB = OracleDBSession.opendatabase("net8_name", "user_name/password", &H0&)

Set Sec = SecDB.createdynaset("select * from user_tables", &H0&)

Set SecRecord = Sec.fields

Do While Not Sec.EOF

Debug.Print SecRecord(0)

Sec.movenext

Loop

要访问自动化服务器所提供的接口,就需要首先创建一个服务器的实例,在VB中,这是通过调用CreateOjbect函数来完成的。这个函数的参数是组件的ID。CreateObject返回一个接口,从此接口可以获得组件的其他接口。OraSession是调用CreateObject时由OO4O返回的接口。

在前面的例子,是通过下面的语句来实现这一点的:

Set OracleDBSession = CreateObject("OracleInProcServer.XOraSession")

OracleInProcServer.XoraSession是用于OO4O的版本独立的程序ID,它由ORACLE客户安装程序在Windows Registry中注册,它是Class ID(CLSID)的符号名,CLSID是标识OO4O组件的全局唯一标识符。OracleDBSession是保存OraSession接口的实例的变量。OraSession主要用来作为创建OraDatabases的工厂对象。

OraSession接口的OpenDatabase方法被用于记录到ORACLE数据库的连接。这个方法还返回到OraDatabase接口的引用。OraDatabase提供了用于执行SQL语句和PL/SQL块的方法。下面一句处理的是连接:

Set SecDB = OracleDBSession.opendatabase("net8_name", "user_name/password", &H0&)

其中net_name,user_name,password等几项替换成实际的名字。

2.执行SQL和PL/SQL程序块

Dynaset创建方法(CreateDynaset,CreatePlsqlset,CreateCustomDynaset和CreateCustomPlsqlset)与ExecuteSQL和CreateSQL一同组成了OraDatabase接口所提供的执行SQL语句和PL/SQL代码的所有方法。

OraDynaset接口代表着SQL SELECT查询或存储过程返回的游标变量的结果集。它本质上是一个可滚动的(向前或向后)客户端游标,用来浏览执行查询所获得的记录行。

CreateDynaset方法执行SQL SELECT,而CreatePlsqlDynaset执行PL/SQL存储过程。

ExecuteSQL和CreateSQL方法执行SQL语句和PL/SQL块。它们都能执行所给的更新语句,不同的是CreateSQL除执行语句外还返回一个指向OraSqlStmt接口的引用。通过Refresh方法可以在以后用该接口执行同一个查询。由于该查询已经被服务器解析,所以对同一查询的执行会更快一些,特别是在使用绑定参数时就更加如此。

3.使用参数

Set OracleDBSession = CreateObject("OracleInProcServer.XOraSession")

Set SecDB = OracleDBSession.opendatabase(txtNet8, txtUser & "/" & txtPassword, &H0&)

SecDB.Parameters.Add "P1", "A1", 2

SecDB.Parameters.Add "P2", "A1", 2

SecDB.Parameters.Add "P3", 0, 1

SecDB.Parameters.Add "P4", 0, 1

SQL="begin update_bv_securities( :P1, :P2, :P3,:P4) ;END;"

Set SecQuery = SecDB.createsql(SQL, &H0&)

上面是我实际使用中的一段例子,用到了一些参数,大家看一下就可以明白他的意思了,最后一句用的是PL/SQL块,把几个参数传给这个块,然后具体的任务可以交给这个存储过程来完成。

当第二次调用的时候,可以重新给这些参数赋值,然后执行Refresh方法,如下:

SecDB.Parameters("P1").Value = V1

SecDB.Parameters("P2").Value = V2

SecDB.Parameters("P3").Value = V3

SecDB.Parameters("P4").Value = V4

SecQuery.Refresh

在频繁执行的SQL语句中与OraSqlStmt一同使用参数是比重复使用ExecuteSQL语句更为优化的方法。当执行OraSqlStmt中的Refresh方法时,该语句不必再被数据库服务器解释。在应用程序服务器上将能显著地节省Oracle数据库服务器的处理时间。使用参数和占位符还可以允许将本地的数据库类型按本地的格式传送到服务器上,因此能够去除转换的步骤并且减少在网格上传输的字节数。

但是在我的实际使用中,发现这个方法在刷新频率太快时很容易出错,而且效率的提高也不明显。

-------------------------

昨天看着书抄了一个晚上,如果错太多请看书吧《Oracle 8i Web开发指南》

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有