ALTER  proc sp_Login
@name varchar(100)
as
select * from login where name=@name以上是我的在MS SQL SERVER2000里的存储过程,在查询分析器里测试过是可以的
DataModule2.adoPro1.Close;
DataModule2.adoPro1.ProcedureName:='sp_Login';
DataModule2.adoPro1.Parameters.ParamByName('@name').Value:='888';
DataModule2.adoPro1.Prepared:=true;DataModule2.adoPro1.Open;
我用ADOStoredProc1 调用,就是上面的代码,结果老说我@name 找不到
我晕了,也找了资料,不知道错误在哪里,大家指导小弟下,谢谢

解决方案 »

  1.   

    存储过程控件TAdoStoreProc是不能自动析出参数的(包括BDE的TStoreProc)也是这样, 如果你需要析出参数可以StoredProc1.Parameters.Refresh;或者你自己采用Parameters.AddParameter去处理.
    最简单的,在设计期的属性编辑器里选择存储过程名称后继续选择Parameters就可以了.
      

  2.   

    function GetWritNo(Dept_NO, object_Name: String): String;
    var
      Pro_Panel:TADOStoredProc;
    begin
       Pro_Panel:=TADOStoredProc.Create(nil);
       try
         Pro_Panel.Connection:=myconn;//你的连接     Pro_Panel.ProcedureName:='ProcedureName;1';          
         Pro_Panel.Parameters.CreateParameter('@RETURN_VALUE',ftInteger,pdReturnValue,0,Unassigned);
         Pro_Panel.Parameters.CreateParameter('@Dept_No',ftString,pdInput,12,Unassigned);
         Pro_Panel.Parameters.CreateParameter('@Object_Name',ftString,pdInput,20,Unassigned);
         Pro_Panel.Parameters.CreateParameter('@Result',ftstring,pdInputOutput,30,Unassigned);
         Pro_Panel.Close;
         Pro_Panel.Parameters.ParamByName('@Dept_No').Value:=Dept_No;
         Pro_Panel.Parameters.ParamByName('@Result').Value:=0;
         Pro_Panel.Parameters.ParamByName('@Object_Name').Value:=object_Name;
         Pro_Panel.ExecProc;
         Result:=Pro_Panel.Parameters.ParamValues['@Result'];
       finally
         Pro_Panel.Free;
       end;
    end;
      

  3.   

    谢谢 ,StoredProc1.Parameters.Refresh  加这个语句,按第2次的时候出错,
    上面的代码可以的,在加个Parameters.clear就可以了,谢谢你们,我分数不多,以后多给你们,谢谢