我的存储过程的代码是这样的:
create procedure aaa
@aa char(20)
as
select * from 表名  where cuser_name=@aa
GO在Delphi中这样写的:
procedure TForm1.Button1Click(Sender: TObject);
begin
   with Adostoredproc1 do
       begin
           active:=false;
           parameters.ParamByName('@aa').value:='aaa';
           prepared;
           active:=true;
      end;
但是会提示 'Parameter '@aa' not found'的错误!如果我在设计器中修改parameters中@aa的value之后,在运行,就没有错误了。其实,在设计期间根本就没有必要修改@aa的value值,但就是出错!不知为何,请大侠多帮助!

解决方案 »

  1.   

    prepared;
    ///改为:
    prepare;
      

  2.   

    prepare;
    parameters.ParamByName('@aa').value:='aaa';
      

  3.   

    不要在属性里设置参数了,直接动态产生就好了,像这样:
    with MyDM.ADOSP do
      begin
        ProcedureName := 'sp_spaceused';  // 设置存储过程名
        Close;   // 关闭以前的数据集
        Parameters.Clear;  // 清空以前的参数
        Parameters.CreateParameter('@objname',ftString,pdInput,100,'table1');  //生成新的参数
        Open;// 或者ExecProc,不返回数据集
      end;
      

  4.   

    在Delphi中这样写的:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       with Adostoredproc1 do
           begin
               active:=false;
    ////关注   Refresh; 
               parameters.ParamByName('@aa').value:='aaa';
               prepared;
               active:=true;
          end;
    学习中。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       with Adostoredproc1 do
           begin
               active:=false;
    ////关注   parameters.Refresh; 
               parameters.ParamByName('@aa').value:='aaa';
               prepared;
               active:=true;
          end;
      

  6.   

    注意你的存储过程的名字可能与数据库中不一致,有的sqlserver数据库中的存储过程名到delphi中会在后面加上";1",另外在赋值之前prepare一把就ok!
      

  7.   

    在对参数赋值前加上parameters.Refresh;
      

  8.   

    绝对应该这样写,应为参数名称为aa,你写成@aa肯定错了,
    要不可以先clear参数,再create,然后再赋值也可以.
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       with Adostoredproc1 do
           begin
               active:=false;
               parameters.ParamByName('aa').value:='aaa';
               prepared;
               active:=true;
          end;
      

  9.   

    使用toredproc控件时,要先打开一次得到参数表,再将参数写入值,再重新打开
      with dm.StoredProc1 do
        begin
          Close;
          Params.Clear;
          Open;
          ParamByName('@aa').AsString := 'aaa';
          close;
          Open;
       end;
    或者你动态建