关于存储过程的问题?1、我有以下存储过程
CREATE PROCEDURE  testinoutput  @i char(60) ,@o int output
 AS
  select @o=count( *)  from zfxx
  where  poxm like @i
我在delphi中添加ADOStoredProc控件连接此存储过程,并把@o的类型设置为了output
然后执行以下语句:
  ADOStoredProc2.Parameters.ParamByName('@i').value:='%王浩%';
  ADOStoredProc2.Active:=true;//此句放在最后也出同样错误。
  label1.Caption:=inttostr(ADOStoredProc2.Parameters.ParamByName('@o').value);
系统提示我ADOStoredProc: CommandText does not return a result set.
我不知道怎么改正,请指点。2、我有以下存储过程
CREATE PROCEDURE  testinput  @i char(40) 
 AS
  select * from zfxx
  where  poxm like  @i
我在delphi中添加ADOStoredProc控件连接此存储过程,然后写以下代码:
  ADOStoredProc1.Parameters.ParamByName('@i').value:='%王浩%';
  在ADOStoredProc1.Active:=false;的情况下:
  ADOStoredProc1.Prepared:=true;
  ADOStoredProc1.ExecProc; //不返回结果集
  ------------------------
  ADOStoredProc1.Prepared:=true;
  ADOStoredProc1.open;     //返回结果集
  ------------------------
  如ADOStoredProc1.Active:=true;则直接返回结果集,不用其他语句。
  我想问Active,与ExecProc和open之间的区别或联系?

解决方案 »

  1.   

    open其实就是active := trueADOStoredProc1.ExecProc; //不返回结果集
    ADOStoredProc1.open;     //返回结果集
    这不是你自己说的吗?就是这个意思
      

  2.   

    CREATE PROCEDURE  testinoutput  @i char(60) ,@o int output
     AS
      select @o=count( *)  from zfxx
      where  poxm like @i
    我在delphi中添加ADOStoredProc控件连接此存储过程,并把@o的类型设置为了output
    然后执行以下语句:
      ADOStoredProc2.Parameters.ParamByName('@i').value:='%王浩%';
      ADOStoredProc2.Active:=true;//此句放在最后也出同样错误。
      label1.Caption:=inttostr(ADOStoredProc2.Parameters.ParamByName('@o').value);
    系统提示我ADOStoredProc: CommandText does not return a result set.
    我不知道怎么改正,请指点。這一句不能使用
      ADOStoredProc2.Active:=true;
    使用ADOStoredProc2.EXecProc;我在delphi中添加ADOStoredProc控件连接此存储过程,然后写以下代码:
      ADOStoredProc1.Parameters.ParamByName('@i').value:='%王浩%';
      在ADOStoredProc1.Active:=false;的情况下:
      ADOStoredProc1.Prepared:=true;
      ADOStoredProc1.ExecProc; //不返回结果集
      ------------------------
      ADOStoredProc1.Prepared:=true;
      ADOStoredProc1.open;     //返回结果集將ADOStoredProc1.ExecProc; 去掉
    ADOStoredProc1.Prepared;ExecPRoc與Open的區別簡單一些說:一個將返回結果集,一個隻是執行
      

  3.   

    对于返回结果集的情况使用TADOStoredProc的open方法或设置active属性为True;
    对于不返回结果集或仅仅返回结果到输出参数,可使用ExecProc方法后,从Parameters属性中获得。
      

  4.   

    1、将AdoStoredProc2.Active改为adoOStoredProc2.ExecProc
    execpro执行不返回结果集的,open相反,
    2、active与open一样下面的是取返回参数的
    if inttostr(adoOStoredProc2.Parameters.ParamByName('@o).value)='1' then
      application.MessageBox('数据保存成功','提示',mb_ok)
    else
      application.MessageBox('数据保存失败,请重保存!','提示',mb_ok);