我是这样写的,能否有什么改进呢?感觉挺慢的:
另外,TADOStoredProc.Create(self);会不会效率比较低,我其实用到了递归,所以create次数比较多var
  spTmp:TADOStoredProc;
  tnTmp:TTreeNode;
begin
  spTmp:=TADOStoredProc.Create(self);
  spTmp.Connection:=connThis;  spTmp.Prepared:=true;    spTmp.ProcedureName:='SP1';
    spTmp.Parameters.Refresh;
    spTmp.Parameters.ParamByName('@A).Value:=strA;
    spTmp.Open;
    spTmp.ExecProc;
    spTmp.First;
    while not spTmp.Eof do
    begin
    end;    // while
    spTmp.Close;    spTmp.ProcedureName:='SP2';
    spTmp.Parameters.Refresh;
    spTmp.Parameters.ParamByName('@A).Value:=strA;
    spTmp.Open;
    spTmp.ExecProc;
    spTmp.First;
    while not spTmp.Eof do
    begin
    end;    // while
    spTmp.Close; spTmp.free;

解决方案 »

  1.   

    这样
     spTmp.Open;
        spTmp.ExecProc;
    以后    spTmp.First;居然没错!!!!
      

  2.   

    如果Create的次数比较多,你为什么不用一个固定的组件呢
      

  3.   

    同意楼上
    还有 spTmp.Open;  spTmp.ExecProc;。楼主应该再研究以下。
      

  4.   

    我建议你只Create一次,用完后Close,再用时再Open。
    另外:Open后存储过程需要有返回结果集; ExecProc则不需要返回结果集。
      

  5.   

    可是如果我没有写ExecProc,运行到后面至于需要Create多个,原因是我用到递归,在SP没有close之前我就需要递归到下层了,自然要Create多个了。
      

  6.   

    我删了spTmp.ExecProc后,不过效率还是慢
    对了,Prepared什么时候用,open之前需要吗?
      

  7.   

    慢的原因:
    一:你的驱动或者连接有问题
    二:数据库建立不是很好
    三:即使每create一次控件也不会感觉到慢的;建议:用个固定控件试试,如果还是慢就更个连接方式吧
      

  8.   

    ado的版本也很重要。prepare是执行操作之前做的准备动作,规范的写法是要的吧