存储过程Create Procedure PR_DoSth
AS
BEGIN
  // Some Logic here
  -- DoSomething here
  SELECT * FROM TABLE_TEMP
END对于这样的存储过程,请问如何遍历返回的数据集?谢谢

解决方案 »

  1.   

    哦,不好意思,看错了; 是这样
    adoquer1.close;
    adoquer1.sql.text:='exec PR_DoSth';
    adoquer1.open;
      

  2.   

    请问怎么读出返回的数据集呢?
    之前一直在琢磨用TADOStoreProc.Fields[].[value]一直很疑惑怎么多取多行记录我是小白,请勿介意
      

  3.   

    哦,2楼还写错了个单词adoquer1->adoquery1因为你的存储过程是返回一个表结构的数据集; 所以看2楼的方法,直接读就行了,就这么简单,去试试吧procedure TForm1.Button1Click(Sender: TObject);
    begin
      with adoquery1 do
      begin
        close;
        sql.text:='exec PR_DoSth';
        open;
        edit1.text:=FieldByName('列名').AsString; //列名就是TABLE_TEMP表中的列,用Fields[]也行
      end;
    end;
      

  4.   

    嗯,如果返回的是两条记录呢?adoquery1.FieldByName()返回的为什么只是一个值而不是一个列呢?
      

  5.   

    id name
    ------
    1 B 
    2 C
    4 X
    9 V比如上面这个表,当Open的时候记录指针是在第1条记录上的,所以取得的是第1笔数据,即id=1这一笔用adoquery1.next向下移动,执行一次next则记录指针就向下移动一位,就可以取后面的数据了
    还有prior,first,last方法等,表示前1笔,第1笔和最后1笔若想直接取id=4这一笔,可以这样
    if adoquery1.locate('id',4,[]) then
     edit1.text:=adoquery1.FieldByName('name').AsString; //edit1显示X这是locate方法,不懂就去翻翻书吧
      

  6.   

    返回一列,或多列;就要用表格控件显示了,比如用DBGrid;
      

  7.   

    非常感谢,分给你了。顺便可以说说TADOStoreProc与TADOQuey区别么?仿佛TADOStoreProc也可以实现