新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:基于DM数据库的“Power Builder“程序开发

基于DM数据库的“Power Builder“程序开发

新客网 XKER.COM 2008-02-02 来源:赛迪网 17313 收藏本文

(2)在此用户对象中,声明Local External Functions,将存储过程以RPCFUNC要害字声明为外部函数。在Declare Local External Functions对话框中按Procedures按钮选择要调用的后台存储过程,或直接输入语句:

subroutine PROC_OUT(long A1,ref blob B1,
ref boolean C1,ref blob D1,ref string E1,
ref string F1,ref date G1,ref decimal H1,
ref double I1,ref double J1,ref long K1,
ref long L1,ref time M1,ref datetime N1,
ref long O1,ref blob P1,ref string Q1) RPCFUNC 
  subroutine PROC_INOUT(ref long A1,
ref blob B1,ref boolean C1,ref blob D1,
ref string E1,ref string F1,ref date G1,
ref decimal H1,ref double I1,ref double J1,
ref long K1,ref long L1,ref time M1,ref datetime N1,
ref long O1,ref blob P1,ref string Q1) RPCFUNC

 

(3)保存该用户对象。

(4)在Application画笔中,进入应用属性对话框,在Variable Types页,将上Transaction用户对象设置为缺省的全局变量SQLCA。

(5)脚本中,编码调用相应的外部函数。形式:SQLCA.函数名(参数)。如可用“sqlca.proc_out(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)”调用例子中定义的PROC_OUT存储过程。其中a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q为调用参数。

以DECLARE PROCEDURE语句声明存储过程

直接使用以下脚本即可调用

declare proc_ini procedure for proc_in
('a',0,'sgsdg','w','sgsdg',sysdate,34634,
34634,34634,34634,3464,curtime,curtime,34,'a','2');
//`g',g=sysdate,h=34634,i=34634,j=34634,k=34634,
l=3464,m=curtime,n=curtime,o=34,p='a',q='2';

execute proc_ini;

两种方法的区别:

(1)方法一适用于具有IN、OUT和IN OUT参数的存储过程,而方法二仅支持IN和OUT参数,不支持IN OUT参数;

(2)方法一对参数的数目无限制,方法二最多支持255个参数;

(3)方法一不支持记录(Recorder)的传递,方法二可传递和接收记录。

5.PB中对事务的使用

PowerBuilder中,有4个SQL语句专门进行事务处理,它们是connect,disconnect,commit和rollback,分别负责和数据库建立联接、断开联接、提交事务和回退事务等。在进行数据窗口检索或者执行SQL语句之前,首先应该使用connect语句和数据库建立正确的联接;当所有和数据库相关的操作完成后,可以使用disconnect语句和数据库断开联接。commit用来提交一个事务,rollback用往返退一个事务。这四个事务治理语句的格式相类似,如下所示:statement {using transaction};和数据库建立联接后,可以完成操作数据库的工作并执行commit或rollback。在每个commit或rollback之后关闭旧的事务处理,并开始新的事务处理。在一个事务处理过程中,应用程序控制着数据库,并由DBMS根据一定的机制对数据库中的数据加锁。假如一个事务的持续时间过长,就会导致许多的问题。例如,对于一个典型的生产系统,天天将自动或者人工进行事务日志转储。假如该系统的某类客户端应用程序整天运行并且只进行只读查询,那么在使用connect语句启动事务之后事务总是处于激活状态,任何转储或者截断日志的企图都不会生效,最终将导致日志爆满而引起整个数据库的问题。所以,PowerBuilder给事务对象提供了一个可以选择自动提交事务的成员变量,即AuToCommit,将该参数设置为True可以在事务对象所包含的每个语句执行完后自动执行commit,从而结束一个事务。另外一种解决方法是由开发人员在脚本中使用事务治理语句显式地治理事务,这需要更好地理解事务。

数据窗口是和数据库打交道的一个主要控件,在执行数据窗口的功能之前必须首先给数据窗口控件正确设置事务对象。一般在数据检索之前使用函数SetTrans或SetTransObject设置事务对象。使用不同的函数,数据窗口的事务处理方式就不同。函数SetTrans的语法格式如下所示:dwcontrol.SetTrans( transaction )其中,dwcontrol是要设置的事务对象的数据窗口控件名称,transaction是事务对象名称。若函数正确执行,则返回1,否则返回-1;任意参数为NULL则返回NULL。函数SetTransObject和该函数的格式、参数与返回值完全相同。

函数SetTrans设置事务对象后,数据窗口可以自动治理事务的处理,事务中所包含的每个功能或者语句执行完后都自动进行事务治理。而函数 SetTransObject设置事务对象后,数据窗口的事务处理得由脚本控制,除非在和数据库建立联接之前将事务对象的AuToCommit成员变量设置成了True。虽然数据窗口自动进行事务处理可以省去一些关于事务处理的脚本,但是也带来了很多的潜在危险。每次执行检索或修改等操作之前自动联接数据库,执行完后自动执行disconnect,无需再执行connect,commit,rollback或disconnect了。执行过程中的任何错误都会导致自动执行rollback,脚本对事务处理别无选择,无法控制事务的处理。在应用系统中和数据库的联接非常少时,可以由系统自动进行事务处理,这时使用函数SetTrans给数据窗口控件设置事务对象。通常情况下,使用SetTransObject设置事务对象可以使数据窗口有更高的执行效率。建议使用SetTransObject给数据窗口控件设置事务对象,例如,在数据窗口dw_dm的constrator或新建按钮中输入脚本:

dw_dm.settransobject(SQLCA) 
dw_dm.retrieve()
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐