--取最大值
CREATE PROCEDURE CP_SYSMAX(
@TableName               varchar(32),
@Maxid                        integer  output
)AS
update SYS_MAX set Maxid = Maxid +1
   Where TableName = @TableName
  if @@error != 0 return @@errorselect @Maxid = Maxid
   from SYS_MAX
   where TableName = @TableName
   if @@error != 0 return @@errorselect  @Maxid = @Maxid  if @@error != 0 return @@error
  return @MaxId
GO
--------------------------------------------以上是存储过程-------------------------------------
PS-就是取一个表的最大值  执行一次就+1在DELPHI 里怎么调用?  要用到哪些控件?

解决方案 »

  1.   

    ADO的组件中有一个专门用来处理存储过程的,使用类似adoquery,其实adoquery也是可以用的
      

  2.   

    程序实现过程:设参数:i_sql:string; 
           id: integer;
    begin
    i_sql := 'declare @Maxid int,@Ninterid varchar(20) '
      + ' exec CP_SYSMAX 'tablename',@CP_SYSMAX output ' 
      + ' SELECT Maxid = @Maxid '
      
    //使用查询数据集 AQOquery
      with AQOquery do
      try
        disablecontrols;    close;
        SQL.Clear;
        SQL.Add(ssql);
        prepared;
        open;
      finally
        enablecontrols;
      end;
      
      //取得结果
      id := AQOquery.Findfield('Maxid').asinteger;
    end;
      

  3.   

    错了!
    应该是:i_sql := 'declare @Maxid int ' 
      + ' exec CP_SYSMAX 'tablename',@Maxid output ' 
      + ' SELECT Maxid = @Maxid ' 
      

  4.   

    i_sql  中还有一些引号方面的使用错误,你自己改一下吧
      

  5.   

    使用ADOStoredProc    with  ADOStoredProc do
         begin
             Connection:=ADOConnection;
             Close;
             ProcedureName:='CP_SYSMAX';
             Parameters.Clear;
             Parameters.CreateParameter('@TableName',ftstring,pdInput,32,kk);//kk是要传入的变量,如kk:='kaikai'
             Parameters.CreateParameter('@Maxid',ftinteger,pdoutput,0,0);
             ExecProc;
             Showmessage(Parameters.ParamByName('@Maxid').Value); //这个就是返回的@MaxId值
             Connection:=nil;
         end;