标题: 在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