sql里面
create procedure wm(
@a int,
@b int output
)
as
begin
 set @b=@a+1
end
GOdelphi中设置ADOConnection1,连接无误
        设置ADOStoredProc1,connetion:='ADOConnection1'
然后:procedure TFm_main.FormCreate(Sender: TObject);
var a:integer;
    b:integer;
begin
   a:=1;
   b:=1;
   
   with Fm_FDM.ADOStoredProc1 do
    begin
     ProcedureName:='wm';
     Parameters.Clear;
     parameters.parambyname('@a').Value:= a;
     prepared:=true;
     open;
    end;
   
    b:=  Fm_FDM.ADOStoredProc1.fields[0].AsInteger;
    showmessage('b='+inttostr(b));
end;报错   'ADOStoredProc1: Parameter '@a' not found'啥问题?我第一次用delphi存储过程,一定要什么关键点?
指点一下。

解决方案 »

  1.   


    var a:integer; 
        b:integer; 
    begin 
      a:=1; 
      b:=1; 
      
      with Fm_FDM.ADOStoredProc1 do 
        begin 
        Close;
        ProcedureName:='wm'; 
        Parameters.Clear; 
        Parameters.Refresh;
        parameters.parambyname('@a').Value:= a; 
        open; 
        end; 
      
        b:=  parameters.parambyname('@b').Value; 
        showmessage('b='+inttostr(b)); 
      

  2.   


    var a:integer; 
        b:integer; 
    begin 
      a:=1; 
      b:=1; 
      
      with Fm_FDM.ADOStoredProc1 do 
        begin 
        Close;
        ProcedureName:='wm'; 
        Parameters.Clear; 
        Parameters.Refresh;
        parameters.parambyname('@a').Value:= a; 
        ExecProc;{-------------应该这样} 
        end; 
      
        b:=  parameters.parambyname('@b').Value; 
        showmessage('b='+inttostr(b)); 
      

  3.   

       a:=1;
       b:=1;
       with Fm_FDM.ADOStoredProc1 do
        begin     ProcedureName:='wm';
         Parameters.Clear;
         Parameters.Refresh;     parameters.parambyname('@a').Value:= a;
         parameters.parambyname('@b').Value:= b;
         prepared:=true;
         open;
        end;
        b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
        showmessage('b='+inttostr(b));
    试了结果:'ADOStoredProc1.CommandText does not return a result set'
      

  4.   


    parameters.parambyname('@a').Value:= a; 
        //parameters.parambyname('@b').Value:= b; {B是返回参数,不是传入参数}
        //prepared:=true; 
        //open; 
    ExecProc;
      

  5.   

    出错信息:   过程'wm'需要参数'@b',但未提供该参数。
    直接拷贝出代码:
       a:=1;
       b:=1;
       with Fm_FDM.ADOStoredProc1 do
        begin
         close;
         ProcedureName:='wm';
         Parameters.Clear;
         Parameters.Refresh;     parameters.parambyname('@a').Value:= a;
         ExecProc;
        end;
        b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
        showmessage('b='+inttostr(b));SQL:
    CREATE procedure wm(
    @a int,
    @b int  output
    )
    as
    begin
     set @b=@a+1
    end
    GO
      

  6.   

     大侠:
       Parameters.Clear; 和    Parameters.Refresh; 有什么区别?
       
       Parameters.Refresh起什么作用?
      

  7.   

       a:=1;
       b:=1;
       with Fm_FDM.ADOStoredProc1 do
        begin
         close;
         ProcedureName:='wm';
         Parameters.Clear;
         Parameters.Refresh;     parameters.parambyname('@a').Value:= a;
         parameters.parambyname('@b').Value:= b;
         ExecProc;
        end;
        b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
        showmessage('b='+inttostr(b));就对了,说明@b是个输入/输出参数,那么仅仅是输出的参数怎么表达呢?
      

  8.   


    create procedure wm( 
    @a int, 
    @b int=0  output 

    as 
    begin 
    set @b=@a+1 
    RETURN @b
    end
    GO
    调用:procedure TForm1.Button2Click(Sender: TObject);
    var
    a:integer;
    begin
     a:=1;
     with ADOStoredProc1 do begin
        close;
        ProcedureName:='wm';
        Parameters.Clear;
        Parameters.Refresh;
        parameters.parambyname('@a').Value:= a;
        ExecProc;
        edit1.Text:=inttostr(parameters.parambyname('@b').Value);
     end;
    end;