关于FireDAC返回多结果集的问题

以前使用ADO, 如果SQL返回的结果集有多个 可以通过NextRecordset来依次获取

代码移植到FireDAC, 对于多结果集处理差不多, 但是还是有一些不一样的地方:

1.TDataSet本身是不支持多结果集的, 所以不要再这个上面浪费精力

2.切换到下一个结果集, ADO.NextRecordset 对应 FD.NextRecordSet

3.判断是否有下一个结果集, ADO的方法是NextRecordset <> nil, 而FireDAC的NextRecordSet没有返回值, 需要NextRecordSet以后判断FD.Active

4.ADO.Recordset对应的是FD.Data, 但是, Recordset是一个接口, 手动增加引用计数以后释放ADO对象仍然可以访问, 但是Data不行, FD对象释放以后Data内容也就没了, 虽然他也是一个接口, 但是实际数据还是存放到FD对象里的

5.FireDAC默认是不支持多结果集返回的, 需要手动设置 FetchOptions.AutoClose := False; 以后才可以

6.FireDAC如果你想吧得到的多结果集挨个取出来, 那么不能直接用临时变量保存Data(Data是个接口), 需要用一个内存表去保存:

  FDQuery1.Open;
  FDQuery1.FetchAll;
  FDMemTable1.Close; {一定要先close, 否则第二次设置其Data会报错}
  FDMemTable1.Data := FDQuery1.Data;
  FDQuery1.NextRecordSet;
  if FDQuery1.Active then
  begin
    FDQuery1.FetchAll;
    FDMemTable2.Close;
    FDMemTable2.Data := FDQuery1.Data;
  end;
时间: 2024-08-06 04:22:11

关于FireDAC返回多结果集的问题的相关文章

如何灵活的使用存储过程返回的结果集

在做报表开发时,遇到这样的需求: 当前要开发的报表A,其数据来源于另一张已经开发好的基础报表B. (1)由于统计维度不同,从基础报表B获取的数据需要做进一步的处理. (2)当基础报表B的取数逻辑发生变更时,报表A的取数逻辑也要做相应的变更,保持取数逻辑的一致. 经分析,由于报表A和报表B均为存储过程返回的结果集,实为调用和被调用的关系. 于是问题的关键点转化为:存储过程A该如何调用存储过程B,才能灵活的使用存储过程B返回的结果集. 以下案例中隐去真实的业务场景(甄士隐去,贾雨村言) 首先,我们对

《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集 (转)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性设置默认值.在我们示例中,当数据库中返回null值时,用‘0’作为YearsWorked属性的默认值. 解决方案 假设你有如图3-7所示的模型,你想通过模型查询employees.在数据库中,代表employees的表包含一可为空的YearsWorked列.该列映射到Employee实体中的YearsWork

Struts2中动态的指定返回的结果集

1.在Struts2中,可以在struts.xml配置文件中动态的指定返回的结果集.用${属性名}的方式取得Action类中的属性,在服务端判断好相应的跳转路径,然后存到变量里,然后再在struts.xml配置文件中用ognl表达式 ${属性名} 这种方式取出来,可以极大的增加配置文件的灵活性.接下来用一个例子来介绍如何动态的指定返回的结果集. 注:其中一定要为动态结果的保存值设置set和get方法. 2.首先,新建一个Struts2项目,项目名为RegisterResult,项目结构如下图所示

ORACLE字符拆分函數,返回結果集

ORACLE不能像MSSQL那樣支持直接返回表類型,所以要先創建一種自定義類型.這裏用到的是嵌套表(Nested Table). -- Nested Table CREATE OR REPLACE TYPE split_str IS TABLE OF VARCHAR(100); / -- Function CREATE OR REPLACE FUNCTION fn_Split ( p_Str VARCHAR2, p_Delimiter VARCHAR2 ) RETURN split_str PI

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集 XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB"> <Order orderid="10692" orderdate="2007-10-03T00:00:00&

Hibernate5.0 EntityManager转SqlQuery并返回Map结果集

Hibernate5.0 EntityManager转SqlQuery并返回Map结果集 Query query = entityManager.createNativeQuery("select * from message");query.unwrap(org.hibernate.SQLQuery.class) .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List<Map<String, Object

Spring data jpa中Query和@Query分别返回map结果集

引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/details/51016234 http://www.cnblogs.com/zj0208/p/6008627.html Query的使用: 在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,

mybatis调用mysql存储过程返回多结果集(完整)

最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的.中午抽空特地搜了下,整合完整示例如下: 1.创建测试存储过程 delimiter $$ CREATE PROCEDURE sp_multi_resultset(IN p_operator_company_no int, IN p_operator_no int, OUT p_error_code v

处理Mybatis返回的结果集为Map类型

最有用到mybatis返回一个map结果集,然后就针对性的在网上找了一些相关大牛的总结:1.https://www.cnblogs.com/jwdd/p/10046270.html2.https://www.codercto.com/a/33475.html 然后经过自己的测试终于可以应用实际业务中1.如果你确定返回的数据只有一条,你可以这样整 xml中: <select id="searchncomedateByInvestID" resultMap="java.ut