不是用Active := true, 而是用ExecProc!

解决方案 »

  1.   

    storeproc:=TStoredProc.Create(nil);
      storeproc.DatabaseName:='ztv40';
      storeproc.StoredProcName:='ZT_com_maxzj';
      storeproc.Active:=True;
      storeproc.Params[1].AsString:=Tmaxzj(buffer^).zjxz;
      storeproc.Params[2].AsString:=Tmaxzj(buffer^).khh;
      storeproc.Params[3].AsString:=Tmaxzj(buffer^).hbdm;
      storeproc.Params[4].AsString:=Tmaxzj(buffer^).yhdm;
      storeproc.Active:=False;
      storeproc.Prepare;
      storeproc.ExecProc;
      

  2.   

    改成这样:
    storeproc:=TStoredProc.Create(nil);
      storeproc.DatabaseName:='ztv40';
      storeproc.StoredProcName:='ZT_com_maxzj';
    //  storeproc.Active:=True;
      storeproc.Params[1].AsString:=Tmaxzj(buffer^).zjxz;
      storeproc.Params[2].AsString:=Tmaxzj(buffer^).khh;
      storeproc.Params[3].AsString:=Tmaxzj(buffer^).hbdm;
      storeproc.Params[4].AsString:=Tmaxzj(buffer^).yhdm;
    //  storeproc.Active:=False;
      storeproc.Prepare;
      storeproc.ExecProc;  你调用中天(金仕达)的系统?
      

  3.   

    to hellion:
    这样有提示:“List index out of bound(1)”
      

  4.   

    最简单的方法,第一个参数是:Params[0],而不是Params[1]
      

  5.   

    最简单的方法,第一个参数是:Params[0],而不是Params[1],还有,最好用ParamsByName,因为存储过程回自动带一个参数:ReturnValue(Oracle不会,SQLServer7,SyBase都会。),如果动态创建存储过程,最好用ParamsByName来访问参数。
      

  6.   

    如果用存储过程返回值,要将Active := True,如果不返回值,不能用Active,而用ExecProc,还有,在Oracle中,不能用存储过程返回数据集,其他都回。