mydb.ADOProcPublic.Close;
mydb.ADOProcPublic.Name:='Brush_out';
mydb.ADOProcPublic.Refresh;
//单步运行到下面一句,mydb.ADOProcPublic.Parameters.ParamByName('@Student_Number').value得不到正确的值!
mydb.ADOProcPublic.Parameters.ParamByName('@Student_Number').value:=Student_number.Text;mydb.ADOProcPublic.Parameters.ParamByName('@Card_TimeOut').Value:=Brush_time.Text;
mydb.ADOProcPublic.ExecProc;
Time_Cost.Text:=mydb.ADOProcPublic.Parameters.ParamValues['@Time_Cost'];
Money_Cost.Text:=mydb.ADOProcPublic.Parameters.ParamValues['@Money_Cost'].Value;

解决方案 »

  1.   

    你的存储过程中定义的@Student_Number是什么类型的?如果是Integer,就要类型转换
    try
      mydb.ADOProcPublic.parameters.parambyname(@student_number').value:=IntToStrtudent_number.text);
    except
      //error handle
    end
    @Card_TimeCout也是类似的
      

  2.   

    我的存贮过程如下:CREATE PROCEDURE Brush_Out
     (@Student_Number varchar(20),
      @Card_TimeOut     datetime,
      @Time_Cost        int                OutPut,
      @Money_Cost        Money         OutPut )AS
    Begin
     
          Update Useronline set BrushBZ=0,TimeMark=@Card_TimeOut,TimeCardOut=@Card_TimeOut,TimeCost=ABS(DATEDIFF([minute], TimeLogin, @Card_TimeOut)),MoneyCost=ABS(DATEDIFF([minute], TimeLogin, @Card_TimeOut))* student_xishu / 60,@Time_Cost=ABS(DATEDIFF([minute], TimeLogin, @Card_TimeOut)),@Money_Cost=ABS(DATEDIFF([minute], TimeLogin, @Card_TimeOut))* student_xishu / 60 Where Student_Number=@Student_number
          Update Student Set Student_Money=Student_Money-@Money_Cost where Student_number=@Student_Number
          INSERT into user_log ( Student_number,Student_money,TimeCardIn,TimeLogin,Timelogout,TimeCardout,Student_xishu,TimeCost,MoneyCost) Select Student_number,Student_money,TimeCardin,TimeLogin,TimeMark,TimeCardout,Student_xishu,TimeCost,MoneyCost from Useronline where Student_number=@student_number
          Delete From UserOnline Where Student_Number=@Student_Number
          return 0
    end
    GO
      

  3.   

    mydb.ADOProcPublic.Parameters.ParamByName('@Student_Number').value:=Student_number.Text;mydb.ADOProcPublic.Parameters.ParamByName('@Card_TimeOut').Value:=Brush_time.Text;
    {mydb.ADOProcPublic.ExecProc;///////////这个不行就用这个
     mydb.ADOProcPublic.open;}////////是不是需要返回一个数据集?
    Time_Cost.Text:=mydb.ADOProcPublic.Parameters.ParamValues['@Time_Cost'];
    Money_Cost.Text:=mydb.ADOProcPublic.Parameters.ParamValues['@Money_Cost'].Value;
      

  4.   

    有个问题,你存储过程怎么能RETURN值呢,还有一个问题,用SQL SERVER数据库要求把输出参数也要传递进去。我遇到过,不过有的时候我不传输入参数可以,有的时候缺不行,最后还是需要传入输出参数。你试试
      

  5.   

    Sqlserver的存储过程可以用RETURN返回值;输出参数也可以不必传递;另外
    //单步运行到下面一句,mydb.ADOProcPublic.Parameters.ParamByName('@Student_Number').value得不到正确的值!是什么意思?你是想单步执行的时候查看mydb.ADOProcPublic.Parameters.ParamByName('@Student_Number').value的值吗?应该是看不到的。另外sqlserver默认的返回值就是0,所以没必要加return 0,我一般用return 返回一些错误状态码