USE football 
GO
存储过程:
IF EXISTS(SELECT name FROM sysobjects
      WHERE name = 'InsertMoneyType' AND type = 'P')
   DROP PROCEDURE InsertMoneyType
GO
USE football
GO
CREATE PROCEDURE InsertMoneyType
                 @money_name varchar(10),
                 @money_sname varchar(10),
                 @change_rate float,
                 @MaxMoney_id varchar(3) output 
AS
DECLARE @money_id varchar(3)
SELECT @MaxMoney_id = max(money_id) + 1 FROM MoneyType
INSERT INTO MoneyType(money_id,money_name,money_sname,change_rate) 
VALUES(@MaxMoney_id,
       @money_name,
       @money_sname,
       @Change_rate)
GOdelphi调用:
procedure TfmModifyMoneyType.btnOKClick(Sender: TObject);
var
  iMoneyID: integer;
begin
  with dmFootBallForm.ADOStoredProc1 do
  begin
    Close;
    ProcedureName:='InsertMoneyType';
    Parameters.Refresh();
    Prepared;
    Parameters.ParamByName('@money_name').Value := edtMoneyName.Text;
    Parameters.ParamByName('@money_sname').Value := edtMoneySName.Text;
    Parameters.ParamByName('@Change_rate').Value := edtChangeRate.Text;
    Parameters.ParamByName('@MaxMoney_id').Value := iMoneyID;
    Open;
  end;
end;

解决方案 »

  1.   

    执行后提示:
    ADOStoredProc1:Parameter '@money_name' not found
      

  2.   

    Parameters.ParamByName('@Change_rate').Value := edtChangeRate.Text
    >>>只知道这句话是有问题的 但是错误信息的提示好像不是这里的
    参数是flaot但是你的赋值却是string
    >>>@MaxMoney_id varchar(3) output 是你的输出参数为什么还要赋值呢?
    Parameters.ParamByName('@MaxMoney_id').Value := iMoneyID;
      

  3.   

    你有没有把@money_name设置为input类型,要不没有的话你试试看,在ADOStoredProc1.parameters里设置.
      

  4.   

    楼上的意思是ADOStoredProc1的parameters属性里看看@money_name参数是不是input类型
      

  5.   

    procedure TfmModifyMoneyType.btnOKClick(Sender: TObject);
    var
      iMoneyID: integer;
    begin
      with dmFootBallForm.ADOStoredProc1 do
      begin
        Close;
        ProcedureName:='InsertMoneyType';
    ///加上这一段
         parameters.Clear;
          parameters.CreateParameter('@money_name ',ftstring,pdinput,10,0);
          parameters.CreateParameter('@money_sname',ftstring,pdinput,10,1);
          parameters.CreateParameter('@change_rate',ftcurrency,pdinput,8,2);
          parameters.CreateParameter('@MaxMoney_id',ftstring,pdoutput,3,3); 
          prepared;
    ///----------------
        Parameters.ParamByName('@money_name').Value := edtMoneyName.Text;
        Parameters.ParamByName('@money_sname').Value := edtMoneySName.Text;
        Parameters.ParamByName('@Change_rate').Value := edtChangeRate.Text;
        Parameters.ParamByName('@MaxMoney_id').Value := iMoneyID;
        Open;
      end;
    end;
      

  6.   

    按一万吨爱的方法执行,报错:Undeclared identifier:"ftstring"
                                Undeclared identifier:"ftcurrency"
                                Undeclared identifier:"ftoutput"   
    why???
      

  7.   

    加上 DB, ADOdb 单元