很多朋友问如何在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;
运行结果为:
说明一切运行正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架