我有一个带有此签名的存储过程:
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;
现在我需要循环游标。我怎样才能做到这一点?
最佳答案
CURSOR参数作为记录集返回,因此您可以使用与TADOStoredProc
,TDataSet
,Eof
等Next
类相关的FieldByName
方法对数据进行迭代。
试试这个代码。
ADOStoredProc1.ExecProc;
while not ADOStoredProc1.Eof do
begin
//do something
//ADOStoredProc1.FieldByName('Foo').Value;
ADOStoredProc1.Next;
end;
如果存储过程返回的不只是游标,则可以使用
NextRecordset
方法遍历记录集,如本post所述。
关于sql-server - 如何使SQL输出游标进入Delphi数据组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28968860/