因为Parameters.items是从0开始计数的,所以就越界了,改成0就好了

解决方案 »

  1.   

    建议你这样做
    with adostoredproc1.parameters do
    begin
    Clear;
    CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null));
        //该参数用来返回存储过程的执行请况,看看书就知道了,他有5种,0是成功
    CreateParameter('@customerid', ftString, pdInput, 10, VINET);
    end;
    adostoredproc1.ExecProc;
      

  2.   

    如果参数从0开始,则错误提示为list index out of bound(0)
      

  3.   

    with adostoredproc1 do
        begin
          //procedurename:='custordersorders;1';
          //parameters[1].Name:='@customerid';
          //parameters[1].DataType:=ftstring;
     //     parameters[1].value:='VINET';
          Parameters.ParamByName('@customerid').Asstring:='VINET';
          ExecProc;
        end;
    就OK 了
      

  4.   

    我靠,你要动态的,还真是……行了,我给你写出来,然后去抽根烟,我要全部分的哦
    p1:Tparam;
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    begin
    storedprocname:= ('custordersorders;1')
    params.clear;
    p1 := Tparam.create(params,ptinput)
    try
     params[0].name :='@customerid';
     parambyname('@customerid').asstring :='VINET';
     execproc;
    finally
     p1.free;
    end;
    我靠,我是写出来的,累死我了,这下又死了不知道多少脑细胞。没有经过编译
    的,但我想应该差不多的,你可以试一下
      

  5.   

    ADOStoredProc1.ProcedureName:='sp_help';
      ADOStoredProc1.Parameters.AddParameter;
      ADOStoredProc1.Parameters[0].Value:='sysobjects';
      ADOStoredProc1.ExecProc;ok
      

  6.   

    使用QUERY也可以啊;
    例如
    with query1 do
    begin
         close;
         sql.clear;
         sql.add('execute 存储过程名  :参数1,:参数2');
         parambyname('参数1').asstring:=
         parambyname('参数2').asstring:=
         open; //只能使用OPEN;
    end;
    //用ADOQUERY还是一样的方法
      

  7.   

    还是阿清聪明.
    使用存储过程不就是传入一条sql 语句给dbms吗?所以用query,adoquery是比较理想的
      

  8.   

    with adostoredproc1do
    begin
    Close;             //
    parameters.Clear;
    CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null));
    CreateParameter('@customerid', ftString, pdInput, 10, VINET);
    ExecProc;
    close;
    end;
      

  9.   

    要赋值的阿老兄
    parameters.parambyname('').value := '';
      

  10.   

    to boyqing(阿清) :  你的方法固然简单,但会有小小的问题,举例:当这个存储过程有多条SQL命令,全部执行通过没问题,若第一条语句通过,无论后面发生什么样的错误,Query1不会报错,Delphi截获不到这个错误。所以我建议使用存储过程控件。
    --------------------------------------------------------------------
    动态加载存储过程参数,注意赋值全面:  ADOSP.Parameters.Clear;                        //清空参数列表
      with ADOSP.Parameters.AddParameter do          //追加新参数
      begin
         Name:='@Code';              //参数名
         DataType:=ftString;         //类型
         Direction := pdInput;       //输入输出类型
         Size:=4;                    //长度
      end;