Chinaunix

标题: 在PB中执行存储过程的问题 [打印本页]

作者: onlywxw    时间: 2004-11-26 12:43
标题: 在PB中执行存储过程的问题
1、我的存储过程是这样建立的
create procedure pu_up_pos_slmplu(
ls_prodplu char(13),
ldc_salprc  decimal(10,2)
)
update slmplu
set salprc = ldc_salprc,
    cvsprc = ldc_salprc,
    touchdate = current
where prodplu=ls_prodplu;
end procedure
                                            
2、在PB中我是这样使用的
        DECLARE l_proc_1 PROCEDURE FOR pu_up_pos_slmplu (:ls_prodplu,:ldc_price);
        EXECUTE l_proc_1;
        if        sqlca.sqlcode        <>;        0        then
                ls_err= sqlca.sqlerrtext
                ll_dbcode = sqlca.sqlcode
                rollback        using        sqlca;
                messagebox('错误信息!返回值='+string(ll_dbcode),ls_prodplu+'价格更新失败!错误行号='+string(li_i)+ls_err)
                return       
        end        if
3、结果
我试着在dbaccess中使用execute procedure pu_up_pos_slmplu ('xxxx',50)语句执行,其结果没有问题,但在PB中执行,其sqlcode返回值确一直是100,我查看过传递的变量值,没问题啊,但就是得不到正确得结果,请教大家,看谁能帮我来分析一下是什么原因,谢谢大家
作者: yyiiasc    时间: 2004-11-26 15:38
标题: 在PB中执行存储过程的问题
你看看DECLARE 成功没,返回多少,PB调用的方法不记得了好久没用你查查的帮助
作者: onlywxw    时间: 2004-11-26 18:36
标题: 在PB中执行存储过程的问题
declare确实报错了,返回值-1,但错在哪里哪?请大家帮忙指点一下,谢谢
作者: Ares42    时间: 2004-11-26 20:15
标题: 在PB中执行存储过程的问题
以下是我在PB中执行过程的一段,不知对你有无帮助。(Query_String是执行过程的SQL语句)
        Prepare Sqlsa From uery_String;
        If Sqlca.Sqlcode <>; 0 Then
                Return_String = "0|"
                MessageBox("数据库操作错误[PREPARE]",String(Sqlca.SqlErrText))
        End If

        Describe Sqlsa Into Sqlda;
        If Sqlca.Sqlcode <>; 0 Then
                Return_String = "0|"
                MessageBox("数据库操作错误[DESCRIBE]",String(Sqlca.SqlErrText))
        End If

        Declare Cur_Procedure Dynamic Procedure For Sqlsa;
        If Sqlca.Sqlcode <>; 0 Then
                Return_String = "0|"
                MessageBox("数据库操作错误[DECLARE]",String(Sqlca.Sqlcode) + ":" + String(Sqlca.SqlErrText))
        End If

        Execute Dynamic Cur_Procedure Using Descriptor Sqlda;
        If Sqlca.Sqlcode <>; 0 And Sqlca.Sqlcode <>; 100 Then
                Return_String = "0|"
                MessageBox("数据库操作错误[EXECUTE]",String(Sqlca.Sqlcode) + ":" + String(Sqlca.SqlErrText))
        End If

        If Sqlca.Sqlcode = 0 Then
                Fetch Cur_Procedure Using Descriptor Sqlda;
                If Sqlca.Sqlcode <>; 0 And Sqlca.Sqlcode <>; 100 Then
                        Return_String = "0|"
                        MessageBox("数据库操作错误[FETCH]",String(Sqlca.Sqlcode) + ":" + String(Sqlca.SqlErrText))
                End If

                Do While Sqlca.Sqlcode = 0
                        For i = 1 To Sqlda.NumOutPuts
                                Choose Case Sqlda.OutParmType
                                        Case typeinteger!,typedecimal!,typedouble!,typelong!,typereal!,typeboolean!
                                                Return_String = Return_String + String(GetDynamicNumber(Sqlda,i)) + "|"
                                        Case typeString!
                                                Return_String = Return_String + GetDynamicString(Sqlda,i) + "|"
                                        Case typedate!
                                                Return_String = Return_String + String(GetDynamicDate(Sqlda,i)) + "|"
                                        Case typetime!
                                                Return_String = Return_String + String(GetDynamicTime(Sqlda,i)) + "|"
                                        Case typedatetime!
                                                Return_String = Return_String + String(GetDynamicDatetime(Sqlda,i)) + "|"
                                End Choose
                        Next

                        Fetch Cur_Procedure Using Descriptor Sqlda;
                Loop
        End If

        Close Cur_Procedure;
作者: xixihaha009    时间: 2004-11-29 09:58
标题: 在PB中执行存储过程的问题
我也遇到过这样的问题,一直返回100,
后来干脆把sqlca.sqlcode <>; 0 改成 < 0
查了一下,虽然还是返回100,但是存储过程已经执行了.
作者: onlywxw    时间: 2004-11-29 11:43
标题: 在PB中执行存储过程的问题
确实是返回100我倒是没有让他执行,我也试试,看结果怎样我再来讨教
作者: 大梦    时间: 2004-11-29 13:24
标题: 在PB中执行存储过程的问题
呵呵~~~
作个试验看看procedure到底有没有执行
作者: onlywxw    时间: 2004-11-29 17:38
标题: 在PB中执行存储过程的问题
我在isql下执行过没问题,执行结果一切正常,转到PB中就没戏了,传递的参数我也检测没有问题,不知哪里有毛病




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2