美版苹果用美版4s卡贴激活教程

话不多说,直接正题。偏重Declare方式
一、PB中调用过程的一般格式
Declare my_proce Procedure For p_get_// 定义过程调用Execute my_// 执行过程,这里是不需要其他参数的If SQLCA.SQLCode && 0 Then // 调用过程出现错误处理End IfFetch my_proce Into :ls_ReturnN// 获取出参值,也就是OUT的变量,如果没有out类型的变量,这句也就不需要了If SQLCA.SQLCode && 0 Then // 获取数据出现错误处理End IfClose my_// 关闭调用
二、下面主要表述不同的存储过程对应的定义方式
&一、 无入参存储过程调用
Create Or Replace Procedure p_get_name(v_name Out Varchar2) As//存储过程,有一个out类型参数,无入参Begin
v_name := 'Jone';End;//在PB中这样定义Declare my_proce Procedure For p_get_
// 正确Declare my_proce Procedure For p_get_name(); // 这个也正确//如果你试图传一个参数Declare my_proce Procedure For p_get_name(:ls_Name); 这个就会在执行的时候报错了
&二、 有入参存储过程调用
Create Or Replace Procedure p_get_name(v_First in Varchar2,
in varchar2,
v_name Out Varchar2) AsBegin
v_name := v_First||v_LEnd;//在PB中这样定义 ,这里起名A ,B ,主要是为了不以字面意义影响了思路Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B)//正确,这里的变量会和过程变量循序的对应 ,也就是ls_A对应v_first ,ls_B 对应 v_LastDeclare my_proce Procedure For p_get_name(:ls_B ,:ls_A)//正确,这里的变量会和过程变量循序的对应 ,也就是ls_B对应v_first ,ls_A 对应 v_LastDeclare my_proce Procedure For p_get_name("Michael ","Jordan") //错误,直接使用值是不行的,必须使用变量//我们来指定对应关系,这样就不依赖你输入的顺序了Declare my_proce Procedure For p_get_name(v_last=&:ls_A,v_first=&:ls_B)Declare my_proce Procedure For p_get_name(v_first=&:ls_B,v_last=&:ls_A) //上面这2个定义是完全一样的Declare my_proce Procedure For p_get_name(v_first1=&:ls_First,v_last=&:ls_Last) //这个定义是错误的 ,因为过程中根本就没有叫v_first1的参数Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B,:ls_C)//错误,你试图给给OUT类型的参数也传一个进去就错误了/*注意: 如果存储过程定义的OUT类型的参数不在最后,而是位于入参的中间或者前面的话,那么在PB中定义的话就必须指定对应,否则会报错的,比如:*/Create Or Replace Procedure p_get_name(v_name Out Varchar2,
v_First in Varchar2,
in varchar2
v_name := v_First||v_LEnd;//这是就必须使用 v_First=& ,v_Last=&这样的定义 ,否则就是错误的
三、INOUT类型过程的调用
//PB中使用Declare方式不能调用具有in out类型参数的存储过程的,故采用外部接口的方式//直接上步骤 1. 创建一个事务对象 uo_transcation , new-&pb object-&standart class-&transcation ,命名为uo_transcation 2. 在uo_transcation 的Local External Functions 中定义存储过程,形如:
subroutine p_get_name(string v_First, string v_Last,ref string v_name) rpcfunc
1. subroutine 过程无返回值
2. rpcfunc
不明白,照写吧 ,呵呵
3. ref 这个是重点 ,代表这变量可以是out,in out 类型3. 把uo_transcation 当作默认事务对象
1. 找到application ,也就是你程序写第一open的那个地方
2. 点击菜单 view -& propreties 就打开application的属性了
3. 点击 additional Properties -& variable Types -&sqlca 下面框修改成uo_transcation
4. OK4. 在程序中直接使用 sqlca.p_get_name(a,b,c)这样的就可以 ,和普通函数一样注意: 其实这也是PB调用存储过程的一个方法
阅读(...) 评论()2005年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
2007年7月 PowerBuilder大版内专家分月排行榜第二2006年11月 PowerBuilder大版内专家分月排行榜第二2006年9月 PowerBuilder大版内专家分月排行榜第二2006年7月 PowerBuilder大版内专家分月排行榜第二2005年8月 PowerBuilder大版内专家分月排行榜第二2005年5月 PowerBuilder大版内专家分月排行榜第二2004年10月 PowerBuilder大版内专家分月排行榜第二
2006年2月 PowerBuilder大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。讨论一下PB调用存储过程问题 -PB- TryCatch
>> Content
讨论一下PB调用存储过程问题
各位朋友,对PB调用存储过程的问题,大家可发现什么问题,怎么解决的?今天我用PB调用一个存储过程,执行的时候,如果sqlcocd&0或sqldbcode&0,我就messagebox()然后rollback可是没有用,居然提交了,如果先rollback再messagebox就可以回滚。急着我没有办法,直接把错误提示保存的变量中,先roolback再messagebox()如果各位朋友发现过这样的问题,并且有好的解决办法,请大家都把解决办法贴出来,谢谢!
------Solutions------
提交与回滚在存储过程写,调用@@error如果不等于0就回滚。PB中调用存储过程的返回值,如果不成功在MESSAGEBOX一下!!
------Solutions------
1.没遇到过!&设置断点看看是否有执行这句代码.2."直接把错误提示保存的变量中,先roolback再messagebox()"这是一个好的做法,事实上你应该这么做的,因为如果先messagebox后rollback的话,客户响应messagebox的时间有可能很长的(比如刚好有别的事,而没有响应你这个message等等),这样有可能增加死锁的机会.&所以你应该先rollback再messagebox.
------Solutions------
也曾经如楼上的试过,但是有时候存储过程里面的事务好像不起作用,在外面照样可以回滚掉。
------Solutions------
这样错误捕捉不到了。
------Solutions------
调用存储过程的时候,还遇到过这样的问题,退出当前窗口的时候,提交了,但是退出整个应用程序的时候,他虽然回滋了,真是晕了。
------Solutions------
请打PB补丁!&你所说的没遇到过,或许是你的代码问题,或许是Bug.
------Solutions------
不过先保存sqlerrtext到变量,回滚然后messagebox&变量是对的。。你的存储过程里面会不会有提交语句呢。。还有autocommit&是不是设置成了true呢。?
------Solutions------
如果事物嵌套的话,里面的事物不怎么管用。autocommit当然是false
------Solutions------
事物嵌套?================如何嵌套?&能否给出代码?
------Solutions------
/*急着我没有办法,直接把错误提示保存的变量中,先roolback再messagebox()*/其实这是个好办法,不管是否自动提交,这样处理都是对的。我也一直这么做的。原因一如楼上一位仁兄说的。或者你可以用这种方式,道理差不多:post&messagebox('error',sqlca.sqlerrtext)
------Solutions------
messagebox()是一个要人为干预的东西,只要有人为做的东西一般都是写在后面的
------Solutions------
在pb中执行rollback&并不回滚存储过程中的对数据库的操作
------Solutions------
在pb中执行rollback&并不回滚存储过程中的对数据库的操作==================这种说法是错误的!!!&除非存储过程中写了rollback或commit语句,否则,在PB中一样可以rollback.
------Solutions------
就算写了,也回滚了。因为是事物嵌套,以外面的事物为准。
------Solutions------
另外,楼主先messagebox,再rollback,这种写法明显是存在问题的,如果跳出messagebox以后,用户不去确认,则事务一直处于锁定状态,相关的表的锁一直不会被释放,如果此时有其它事务试图访问&这些表,就会被锁住,所以,在事务rollback或commit前,是不应该存在与用户的交互过程的,除非应用是单机应用,不存在并发的问题
------Solutions------
同意楼上的一般这么写string&ls_errls_err&=&sqlca.sqlerrtextrollback&using&messagebox('',ls_err)
------Solutions------
搭顺风车问个问题pb10&如何使用sqlserver带output参数的存储过程?注:低版本pb用sqlserver接口直接连库,存储过程使用没有问题pb10不提供sqlserver专用接口,该用odbc连接就不行了,execute不能成功
------Solutions------
------Solutions------
存储过程感觉写的时候不好调试,,虽然也有调试工具
------Solutions------
回滚交给存储过程去做,PB只捕获返回值,如在PB中用事务控制,要写在MESSAGEBOX前。
------Solutions------
要调试存储过程用.NET比较方便。
------Solutions------
先MESSAGE后ROLLBACK本身就不能这样写,你想想如果是多用户在操作,你这里一个MESSAGEBOX把事务给占了不是造成其他人不能用了啊,应该先把ERRTEXT写进变量再MESSAGEBOX
------Solutions------
侵魅绻SQL2000的,我建h你直接在Server上{,那才是正_的做法,而且也很好{。再f你的s_procedure在的r候遇到Error&本砭Return&才Α
------Solutions------
为什么dw.update()不成功时候取sqlca.sqlerrtext取不到???
------Solutions------
我顶!---------------------|水&是&生&命&之&源!|买&点&卡,拿&工&资|http://www.pay3&.cn---------------------
------Solutions------
我知道了,sqlca.sqlerrtext要在rollback之前取
------Solutions------
sqlca本身就是一个事务对象,他调用的存储过程本身就是一个嵌套的事务,只有pb的事务对象才能提交结果,回滚可以在存储过程里,也可以在pb里.但只能回滚一次.rollback一定要在messagebox前面执行.
------Solutions------
多人同时访问一张表的情况很多如果一个事务没提交/回滚就能锁住整个表,那我们都不要做了!请释疑
------Solutions------
理解事务不难,思路要清晰:1、前(PB代码)/后台(存储过程)对事务的理解一样,把前台update()函数理解为INSERT,UPDATE&SQL语句,前后台是否分开事务、或前后台1个事务,就看业务的需要了,注意SQL语句的执行顺序就行。2、后台触发器不能作为事务,它处在在前台update()函数和&COMMIT/ROLLBACK&USING&SQLCA;代码之间。触发器返回的值,决定update()函数的返回值。
------Solutions------
有理,我也是这样想的,如果锁定也是瞬间的}

我要回帖

更多关于 美版6s卡贴激活教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信