ADOStoredProc1 调用Oracle存储过程的问题.在线等待...

yangzong20 2011-03-25 11:38:20
我在Oracle里写了一个存储过程,如下
create or replace procedure dbusrvip.sp_park_up(p_cardno in varchar2, --卡号
p_mktcode in varchar2, --门店
p_terminal in varchar2, --终端 可以不传
p_Jf in number, -- 积分
ret out varchar2) is
--1 成功 0 失败
l_cid varchar2(40);
lye number;

我在PLSQL里运行时正常的,但我在delphi 里调用却提示"不正常地定义参数对象。提供了不一致或不完整的信息"这是为何?

ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='sp_park_up';
ADOStoredProc1.Parameters[0].Value:=trim(Edit1.Text);
ADOStoredProc1.ExecProc;

忘高手指点,在线等待..
...全文
137 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodhj 2011-03-28
  • 打赏
  • 举报
回复
自动的?那你说说看输出的值在哪呢?只有参数是不行的,多试下都不肯,悲剧
yangzong20 2011-03-26
  • 打赏
  • 举报
回复
在线等待
whisht 2011-03-25
  • 打赏
  • 举报
回复
不至一个输入参数吧
yangzong20 2011-03-25
  • 打赏
  • 举报
回复
to goodhj

输出参数已经在 ADOStoredProc1里设置好了,是它自动搜索的
goodhj 2011-03-25
  • 打赏
  • 举报
回复
没设置输出参数吧,ProcedureName:='sp_park_up';这句不用,过程名在设计状态时就赋好

var
s1,s1,s3,s4 ...:String;
.....

with ADOStoredProc1 do
begin
close;
parameters[0].value:=trim(Edit1.Text);
parameters[1].values:=s1; //
parameters[2].values:=s2;
parameters[3].values:=s3;
..
ExecProc;
yangzong20 2011-03-25
  • 打赏
  • 举报
回复
to hongqi162
我直接在delphi里调试他就直接报这个错呀,ADOStoredProc1里面的参数都是他自动搜索出来的,应该没问题吧,能不能给个具体方案呢?万分感谢
hongqi162 2011-03-25
  • 打赏
  • 举报
回复
输出参数也要定义一下
taste品味 2011-03-25
  • 打赏
  • 举报
回复
方式刚才那样,用参数化试试罗,我调用过ORACle包的过程
yangzong20 2011-03-25
  • 打赏
  • 举报
回复
to duck04551
我的数据库是Oracle呀,你那个调用是sql server的调用方法,Oracle这样是调用不了的
taste品味 2011-03-25
  • 打赏
  • 举报
回复
直接用ADOQUERY也行的啊

ADOQUERY.SQL.ADD('EXEC sp_park_select(参数)')试试
yangzong20 2011-03-25
  • 打赏
  • 举报
回复
create or replace procedure dbusrvip.sp_park_select(p_cardno in varchar2,
ret out varchar2,--0 失败 1 成功
rcardno out varchar2,--卡号
rtype out varchar2,--类别
rtypename out varchar2,--类别名称
rjf out number,--积分
rstatus out varchar2) is--状态 Y 正常 N 不正常
lcid varchar2(20);
lcardno varchar2(40);
begin
lcardno := replace(p_cardno,';','');
lcardno := replace(lcardno,'?','');
lcardno := replace(lcardno,';','');
lcardno := replace(lcardno,'?','');
rcardno := fcardtracktono(lcardno);
if rcardno is null then
ret :='0';
return;
end if;
begin
select cdmtype,cdmcid,cdmstatus
into rtype ,lcid,rstatus
from cardmain
where cdmno = rcardno ;
select ctname into rtypename from custtype where ctcode = rtype;
exception when others then
ret :='0';
return;
end ;

begin
select ccurjfye
into rjf
from customer
where cid = lcid;
exception when others then
rjf :=0;
end ;
ret :='1';
end sp_park_select;

这是完整的存储过程麻烦给位大哥帮看看,小弟在线等待急...
我在PLSQL里面测试时正常的,但在delphi里测试就出错,这是为何
yangzong20 2011-03-25
  • 打赏
  • 举报
回复
不好意思写错了应该是
create or replace procedure dbusrvip.sp_park_select(p_cardno in varchar2,
ret out varchar2,--0 失败 1 成功
rcardno out varchar2,--卡号
rtype out varchar2,--类别
rtypename out varchar2,--类别名称
rjf out number,--积分
rstatus out varchar2) is--状态 Y 正常 N 不正常
lcid varchar2(20);
lcardno varchar2(40);

我在PLSQL里运行时正常的,但我在delphi 里调用却提示"不正常地定义参数对象。提供了不一致或不完整的信息"这是为何?

ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='sp_park_select';
ADOStoredProc1.Parameters[0].Value:=trim(Edit1.Text);
ADOStoredProc1.ExecProc

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧