CREATE PROCEDURE U_InsertToStudentScore 
  (
  @number INT=0,
  @name CHAR(8)='无',
  @score_english FLOAT=90.9
  )
  AS
  INSERT INTO Table_StudentScore(number,name,score_english)
  VALUES (@number,@name,@score_english)
  SELECT *  FROM Table_StudentScore
GO
这个存储过程是往一个学生成绩表里插入一些数据,在查询分析器里可以正确执行,但是在Delphi程序中,我如下调用
StoredProc1.StoredProcName:='U_InsertToStudentScore';//
StoredProc1.ParamByName('@number').AsInteger:=1;
StoredProc1.Prepare;
StoredProc1.ExecProc;
却出现找不到@number的错误提示,Storedproc1的DatabaseName属性已经指定好了,在params属性中也有这些参数列表,不知为何会出现这种错误,请大虾们指教

解决方案 »

  1.   

    第一个问题,找不到@number的错误提示,你要把参数涮新一下
    parameters.refresh;
    第二个问题,因为你存储过程里有
    SELECT *  FROM Table_StudentScore
    所以此存储过程返回一个数据集,所以用StoredProc1.open; 
      

  2.   

    StoredProc1.StoredProcName:='U_InsertToStudentScore;1';//
      

  3.   

    To:herofy(herofy.go.nease.net) 
    我使用的是StoredProc呀,它没有parameters方法
      

  4.   

    对了,StoredProc没有,他只有params属性
      

  5.   

    A:StoredProc1.StoredProcName:='U_InsertToStudentScore';//
    B:StoredProc1.ParamByName('@number').AsInteger:=1;
    C:StoredProc1.Prepare;
    这三条语句的顺序的变一下即ACB应该可以解决问题
      

  6.   

    另外你的存贮过程的最后一条语句虽然为select但它是为insert服务的,所以你的ExecProc语句没有错,不能写为open
      

  7.   

    换个方法:
      可以用Query或ADOQuery
      var
      number:int;
      with Query do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Exec U_InsertToStudentScore '+number+'');
        SQL.Open;
      end