我用以下程序动态地调用后台过程为什么会出"list index out bound(1)"的错误
(用动态运行的原因是不想在form上出现过的控件)procedure TFrmExam.BitBtn1Click(Sender: TObject);
var
  Q: TSQLStoredProc;
begin
  Try
    Q:=TSQLStoredProc.Create(application);
    Q.SQLConnection:=FrmMain.SQLConnection1;
    Q.Close;
    Q.Params.Clear;
    Q.StoredProcName := 'SD_GET_TABLE';
    Q.Params.CreateParam(ftString ,'p_owner',ptinput);
    Q.Params.ParamByName('p_owner').Value:='MR';
    Q.ExecProc;
  Finally
    Q.Destroy;
  End;
end;

解决方案 »

  1.   

    备注:在form上放个TSQLStoredProc,设定参数后都能正确运行
      

  2.   

    调用只有传入参数的procedure可以,如下
    var
      P1, P2: TParam;
      S: TSQLStoredProc;
    begin
      with s do begin
        s:=TSQLStoredProc.Create(self);
        s.SQLConnection:=SQLConnection1;
        StoredProcName := 'SD_GET_TABLE';--procedure
        Params.Clear;
        P1 := TParam.Create(Params, ptInput);--定义传入参数
        try
          Params[0].Name := 'P_OWNER';       --定义传入参数名称
          ParamByname('P_OWNER').AsSTRING := 'MR';
          ExecProc;
        finally
          P1.Free;
        end;
      end;
    end;
    -----------------------以下运行能通过但对于有out的procedure或者函数会出错。请有经验的人指点
      

  3.   

    调用函数及有in out 参数的procedure会出错,请高人指点