对参数赋值之前先把storedprocedure关闭.
p.close;
p.Parameters.ParamByName('@num').Value:=edit1.Text;
p.Parameters.ParamByName('@shijian').Value:=x.Date;
p.Prepared:=true;
p.ExecProc;

解决方案 »

  1.   

    直接用P.ParamByName('@num').value := edit1.text
    就行了。
      

  2.   

    我试了一下:
    mudeen(笑哥哥)的说法是对的,但不能解决问题,我平时也是这么作的,只是提问时漏抄了,
    liang_jimmy(陪你去看流星雨...) 的做法我想不对,
    请在指点一下:
      

  3.   

    我一般喜欢重新参数,好象不会出现问题
    p.close;
    p.ProcedureName := '存储过程名'
    p.Parameters.Clear;
    p.Parameters.Create(对应参数);
    p.Prepared:=true;
    p.ExecProc;
      

  4.   

    我还是觉得用TAdoQuery方便
    var 
     ADOQ :TAdoQuery;
    beign
    ADOQ.SQL.Add('Exec SPName :a,:b');
    ADOQ.Parameters[0].Value:=edit1.Text;
    ADOQ.Parameters[1].Value:=x.Date;
    ADOQ.ExecSQL;
    end;