惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
量子位
腾讯CDC
A
About on SuperTechFans
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
T
Tailwind CSS Blog
V
V2EX
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
罗磊的独立博客
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
V
Visual Studio Blog
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
有赞技术团队
有赞技术团队

博客园 - xalion

Delphi 13.1 内置支持 SSE (Server-Sent Events) Ubuntu 上 安装 sql server 2022 delphi 12.2 配置Linux 开发环境 Embarcadero 发布开源Bloodshed Dev C++ 分支 实战Devexpress FMX Grid 在ubuntu 上使用wine 运行Delphi win32 应用 苹果体 Delphi 10.4 新功能介绍 初识ubuntu上的docker PostgreSQL 基本数据类型及常用SQL 函数操作 一步一步从PostgreSQL安装到delphi 访问 DLL Injection with Delphi(转载) 使用FMXlinux 开发linux 桌面应用 推荐一套免费跨平台的delphi 哈希及加密算法库 提高sqlite 的运行性能(转载) 使用unidac 连接FB 3.0 (含嵌入版) 在datasnap 中使用unidac 访问数据(客户端) 在datasnap 中使用unidac 访问数据(服务器端) More x64 assembler fun-facts–new assembler directives(转载) x64 assembler fun-facts(转载)
如何在unidac 中执行一次查询获得多个数据集?
xalion · 2020-03-05 · via 博客园 - xalion

很多朋友问如何在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;

运行结果为:

 

 

 说明一切运行正常。