delphi7 调用二个参数的存储过程问题????

wjfxyj 2010-03-09 05:17:35
有sql server 2000 的存储过程如下:
当只有一个参数时能正常执行,在DBGrid显示符合条件的数据。
当增加一个参数,用于辨别要查询字段,就出错
不知何故???
请高手给予正确代码。


CREATE PROCEDURE xscx
@cxz varchar(50),
@dm varchar(20) <---增加
AS
if @dm='编码'
begin
SELECT x_djrq,x_djbh,x_spbm,x_spmc,x_sl,x_zhdj,x_zhje,x_id FROM xsdb where x_spbm like '%'+@cxz+'%'
end
if @dm='名称'
begin
SELECT
x_djrq,x_djbh,x_spbm,x_spmc,x_sl,x_zhdj,x_zhje,x_id FROM xsdb where x_spmc like '%'+@cxz+'%'
end
GO


with xc.ADODataSet1 do
begin
Active:=false;
CommandType:=cmdStoredProc;
CommandText:='xscxwlmxwr';
Parameters.Clear;
Parameters.AddParameter;
Parameters[0].Name:='@cxz';
Parameters[1].Name:='@dm'; <----增加
Parameters[0].Direction:= pdInput;
Parameters[1].Direction:= pdInput; <----增加
Parameters[0].DataType:=ftString;
Parameters[1].DataType:=ftString; <----增加
Parameters.Refresh;
Parameters.ParamByName('@cxz').Value:=trim(Edit1.Text);
Parameters.ParamByName('@dm').Value:=trim(Edit2.Text); <----增加
Active:=true;
ExecuteOptions;
end;

出现错误:list index out of bounds(1),
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjfxyj 2010-03-09
  • 打赏
  • 举报
回复
自己解决了
with xc.ADODataSet1 do
begin
Active:=false;
CommandType:=cmdStoredProc;
CommandText:='cx_wr';
Parameters.Clear;
//中间不要写 ,CommandText有几个参数自动会认
Parameters.Refresh;
Parameters.ParamByName('@dm').Value:=trim(combobox1.Text);
Parameters.ParamByName('@cxz').Value:=trim(edit1.Text);
Active:=true;
ExecuteOptions;
end;


结贴,给分。
cmdream 2010-03-09
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
ADOStoredProc1.Parameters.CreateParameter()
---
SQLDebug_Fan 2010-03-09
  • 打赏
  • 举报
回复
我给你一段例子代码,供你参考

var
Cmd: TADOCommand;
iReValue: Integer;
begin
Cmd := TADOCommand.Create(nil);
try
Cmd.Connection := AdoCon;
Cmd.CommandText := 'xscx';
Cmd.CommandType := cmdStoredProc;
Cmd.Parameters.CreateParameter('@cxz', ftString, pdReturnValue, 50, '值');
Cmd.Parameters.CreateParameter('@dm', ftString, pdInput, 20, '值');
Cmd.Execute;
finally
Cmd.Free;
end;
end;
taixinltd 2010-03-09
  • 打赏
  • 举报
回复
ADODataSet1.close;
ADODataSet1.commandtext:='exec xscx '+QuotedStr(trim(Edit1.Text))+','+QuotedStr(trim(Edit2.Text));
ADODataSet1.open;
bdmh 2010-03-09
  • 打赏
  • 举报
回复
ADOStoredProc1.Parameters.CreateParameter()
bdmh 2010-03-09
  • 打赏
  • 举报
回复
对于存储过程,使用之前先要用代码去创建参数
wjfxyj 2010-03-09
  • 打赏
  • 举报
回复
存储过程名为xscx
CommandText:='xscx';

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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