随笔 - 83,  文章 - 1,  评论 - 475,  阅读 - 41万

很多朋友问如何在unidac 中执行一次查询获得多个数据集?

其实这个问题很简单,unidac 很早就支持这个功能,但是很多人没有研究过。

今天就简单说一下,在unidac 中执行一次查询获得多个数据集。首先这个需要数据库支持,如果

数据库不支持的话,unidac 也是没有办法实现的。

今天以sql server 2014 为例,说一下如何实现这个功能。

首先我们在uniquery中执行下面的查询语句。

procedure TForm2.Button7Click(Sender: TObject);
begin
  cx.SQL.Clear;
  cx.SQL.Add('SELECT  *  FROM DWB d');
  cx.SQL.Add('SELECT * FROM FJRYB f');
  cx.Open;
end;

很明显,如果我们直接运行这一段代码,就会和正常的语句一样,返回第一个select 语句的结果

 

 

 那么我们怎么取得第二个数据集呢?很简单

procedure TForm2.Button8Click(Sender: TObject);
begin
 if not cx.OpenNext then
   exit;

end;

我们只需调用OpenNext 过程。如果有第二个数据集,当前的数据集就移动到第二个数据集了

 

 

 由于只有两个数据集,如果再次执行opennext 就关闭数据集了。什么也不显示了。

 

 

 那么再来一次,又可以显示第一个数据集了,说明这个opennext 是环形的。

当然了在存储过程中这个也是类似的。

我们首先写一个存储过程。

复制代码
CREATE PROCEDURE dbo.MYSUM @sumok INT OUTPUT
AS
BEGIN

  SET @sumok = 1 + 2

  SELECT    *   FROM DWB d
    SELECT  *   FROM FJZB f
END
GO
复制代码

我们要返回两个数据集,一个输出参数。

复制代码
procedure TForm2.Button6Click(Sender: TObject);
var
  i:integer;

  tablelist:Tlist<Tdataset> ;
begin
   sp.Params[1].ParamType:=ptInputOutput;
   sp.Params[1].DataType:=ftInteger;
   sp.Params[1].AsInteger:=10;
   sp.Execute;
     repeat
       showmessage(  sp.Fields[1].AsString);
     until  not sp.OpenNext;


  i:=sp.Params[1].AsInteger;

  showmessage(i.ToString);
end;
复制代码

运行结果为:

 

 

 

 

 

 说明一切运行正常。

 

posted on   xalion  阅读(1515)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示