FIREDAC返回多结果集

FIREDAC返回多结果集code

之前使用ADO, 若是SQL返回的结果集有多个 能够经过NextRecordset来依次获取对象

代码移植到FireDAC, 对于多结果集处理差很少, 可是仍是有一些不同的地方:blog

1.TDataSet自己是不支持多结果集的, 因此不要再这个上面浪费精力接口

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

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

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

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;
相关文章
相关标签/搜索