zoukankan      html  css  js  c++  java
  • FIREDAC返回多结果集

    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;
    

      

  • 相关阅读:
    1657: [Usaco2006 Mar]Mooo 奶牛的歌声
    1610: [Usaco2008 Feb]Line连线游戏
    1660: [Usaco2006 Nov]Bad Hair Day 乱发节
    bzoj1207 [HNOI2004]打鼹鼠
    bzoj1046 [HAOI2007]上升序列
    bzoj3594 [Scoi2014]方伯伯的玉米田
    bzoj1878 [SDOI2009]HH的项链
    bzoj1293 [SCOI2009]生日礼物
    bzoj3211 花神游历各国
    bzoj3038 上帝造题的七分钟2
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10810804.html
Copyright © 2011-2022 走看看