首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-21 
delphi7 调用二个参数的存储过程问题????有sql server 2000 的存储过程如下:当只有一个参数时能正常执行,

delphi7 调用二个参数的存储过程问题????
有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),

[解决办法]
对于存储过程,使用之前先要用代码去创建参数
[解决办法]
ADOStoredProc1.Parameters.CreateParameter()
[解决办法]
ADODataSet1.close;
ADODataSet1.commandtext:='exec xscx '+QuotedStr(trim(Edit1.Text))+','+QuotedStr(trim(Edit2.Text));
ADODataSet1.open;
[解决办法]
我给你一段例子代码,供你参考

Delphi(Pascal) code
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;
[解决办法]
探讨
ADOStoredProc1.Parameters.CreateParameter()

热点排行