我用的是DELPHI2009 MYSQL5.0。我做的是李维的例子:http://book.csdn.net/bookfiles/155/1001556640.shtml
spMath是TSQLStoredProc,只要一点击TotalScore按钮就出错,错误提示是:invalid parameters。存储过程的EID是INT型,rpercent是float型。
procedure TForm1.TotalScoreClick(Sender: TObject);
begin  dmstudent.spMath.Params.ParamByName('EID').Value:=
    StrToInt(combobox1.Text);
  dmstudent.spMath.Params.ParamByName('RPercent').Value:=
    StrToFloat(edit1.Text);  dmstudent.spMath.ExecProc;
  dmstudent.sdsMath.Refresh;
  end;

解决方案 »

  1.   

    EID是EID VARCHAR(10)吖,看清了没??他写的是
      dmCallStoredProc.spRaiseSalary.Params.ParamByName('EID').Value :=
        cbEID.Text;
      dmCallStoredProc.spRaiseSalary.Params.ParamByName('RPERCENT').Value :=
        StrToFloat(edtPercent.Text);而你两个都是转成了int型
      

  2.   

      dmstudent.spMath.Params.ParamByName('@EID').Value:= combobox1.Text; 
      dmstudent.spMath.Params.ParamByName('@RPercent').Value:= StrToFloat(edit1.Text); 或用adoquery  adoquery1.sql.text:= 'call RAISESALARY('''+combobox1.text+''','+edit1.txt+');'
      adoquery1.execsql;
      

  3.   

    先创建参数,然后再对参数赋值
    ADOStoredProc1.Parameters.CreateParameter
      

  4.   

    我的EID在MYSQL里也是INT型的。
    TSQLStoredProc控件里我选了我的数据库和存储过程,然后就能看到两个参数EID和RPercent。难道还要再创建一次参数吗?