sql-server - 如何使SQL输出游标进入Delphi数据组件?

标签 sql-server delphi cursor varying

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

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参数作为记录集返回,因此您可以使用与TADOStoredProcTDataSetEofNext类相关的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/

相关文章:

sql-server - 如何更新 child 的数量?

sql - 对 Oracle 数据库使用 ORDER BY dbms_random.value 时的性能问题

oracle - 如何显示Oracle嵌套游标循环的错误消息

python - 有没有一种方法可以使用 python 将 Windows 鼠标光标更改为自定义光标?

sql-server - 索引性能,集群与非集群

c# - 实现搜索的最佳方式是什么?

sql-server - SQL Server 用户与角色

arrays - E1012 常量表达式违反子范围界限;为什么它适用于变量?

delphi - keybd_event中的bScan参数值0x45是什么意思?

delphi - 如何在不同的缓存上使用TWebbrowser?