1

我有一个带有这个签名的存储过程:

CREATE PROCEDURE SI_Inteligence(@dt datetime, @actions varchar(6), @FullData cursor varying out) 

此过程返回一个打开的游标。

我需要什么样的组件来捕获它并逐条记录迭代它?它只是存储过程中的一个参数!

procedure DoIt;
var sp: TADOStoredProc;
    x: TADODataSet; //?
begin
  sp               := TADOStoredProc.Create(Self);
  sp.Connection    := myConnection; //TADOConnection Component
  sp.ProcedureName := 'SI_Inteligence';
  sp.Parameters.ParamByName('@dt').Value      := date;
  sp.Parameters.ParamByName('@actions').Value := 'something';
  sp.ExecProc;//? Open doesn't return anything
  x := TADODataSet.Create(Self);
  //How load the cursor??
  x.Assign(sp.Parameters.ParamByName('@FullData') as TADODataSet); //crash

end;

现在我需要循环那个光标。我怎样才能做到这一点?

4

1 回答 1

4

CURSOR 参数作为记录集返回,因此您可以使用与类TADOStoredProc相关的方法(如、等)迭代数据。TDataSetEofNextFieldByName

试试这个代码。

  ADOStoredProc1.ExecProc;
  while not ADOStoredProc1.Eof do
  begin
    //do something 
    //ADOStoredProc1.FieldByName('Foo').Value;    
    ADOStoredProc1.Next;
  end;

如果存储过程返回的不仅仅是一个游标,您可以使用本文所述的NextRecordset方法遍历记录集。

于 2015-03-10T16:50:24.517 回答