关于存储过程的小问题!(20分)

  • 主题发起人 主题发起人 yuanyoufa
  • 开始时间 开始时间
Y

yuanyoufa

Unregistered / Unconfirmed
GUEST, unregistred user!
我的存储过程是:
CREATE procedure proc_jifensc_1
( @kkhcode char(10)
)
AS
BEGIN
if exists(select * from jifensc where riqi<'2006-01-01'and kkhcode=@kkhcode)
begin
begin tran
delete jifensc where riqi<'2006-01-01' and kkhcode=@kkhcode /*删除超过六个月的记录*/
if @@error<>0
begin
rollback tran
print('数据库发生未知错误,请联系开发人员!')
return
end
else
commit tran
end
select a.kkhcode,a.kkhname,sum(b.jifen)as jifen,sum(b.jine)as jine from cardcust a,jifensc b where a.kkhcode=b.kkhcode and a.kkhcode=@kkhcode group by a.kkhcode,a.kkhname
return
end
GO
然后delphi中是这样设置的:
try
with datamodule1.chaxunjf1 do //输入存储过程查询积分
begin
close;
prepared:=false;
parameters.ParamByName('@kkhcode').Value:='0001';
prepared:=true;
execproc;
labelededit3.Text:=fieldbyname('kkhcode').AsString;
labelededit4.Text:=fieldbyname('kkhname').AsString;
labelededit5.Text:=fieldbyname('jifen').AsString;
labelededit6.Text:=fieldbyname('jine').AsString;
end;
except
MessageDlg('软件在操作数据库发生错误,请关闭重试!',mtError,[mbok],0);
end;
可是我在调试的时候老是报错:
chaxunjf1:parameter '@kkhcode' not found
我感觉我写的都对呀?
 
TADOQuery.Close;
TADOQuery.SQL.Text := 'Exec proc_jifensc_1 ''' + 'ABC' + '''';
TADOQuery.Open;
 
to royal1442,
你说的方法可以运行成功,可是关键我的方法哪里有问题? 为什么就是报错呢?
而且要是用你是方法的话怎么样传递存储过程的变参呢?
能帮我看下我的错误在哪里?
 
顶一下 帮帮我呀各位!
 
是存储过程控件的Parameters属性没有@kkhcode这个变量,解决的办法为:把存储过程控件的connection和procedurename属性清空,然后再正确设置connection和procedurename属性,然后打开Parameters属性的按钮,再关闭Parameters属性的窗口,这样应该就OK了。
 
按照楼上的步骤,然后看看该参数的类型是不是string的
 
to shenbo_shenbo
我的connection和procedurename属性都设置好了,这个我想应该没有问题
Parameters属性:
prepared:=false;
parameters.ParamByName('@kkhcode').Value:=trim(edit1.text);
prepared:=true;
存储过程的设置是:
CREATE procedure proc_jifensc_1
( @kkhcode char(10)
)
这哪里有问题吗?
 
看你的存储过程,应该是从数据库取出记录吧,怎么用execproc不用active:=True?
 
我知道了
难道用存储过程时必须要这么做吗:然后打开Parameters属性的按钮,再关闭Parameters属性的窗口,
to 寂寞的鸭子,
我按你的方法把execproc改成open了,现在好了,谢谢!
 
在Prepared:=False 后面加上一句
Parameters.CreateParameter('@kkhcode',ftString, pdInput, 50, null);
就可以了``试一下拉``
 
TADOQuery.Close;
TADOQuery.SQL.Text := 'Exec proc_jifensc_1 :kkhcode ';
TADOQuery.parameters.ParamByName('kkhcode').Value:='0001';
TADOQuery.Open;
 
CREATE procedure proc_jifensc_1
( @kkhcode char(10)
)

是不是该定义下是输出类型还是输入类型的吧!!呵呵,我一直都是很老实的写好。

不知道是不是这里的问题!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部