zoukankan      html  css  js  c++  java
  • ODAC (V9.5.15) 学习笔记(二十一)数据复制

    用TVirtualTable在内存中缓存TOraQuery中的数据,主要应用场景是参照其他数据,需要将TOraQuery中的数据复制到TVirtualTable,由于没有类似于TClientDataSet的Data属性,所以只能考虑数据对拷。原来考虑的是通过数据流方式,采用:

    ms := TMemoryStream.Create;
    try
      OraQuery1.SaveToXML(ms);
      VirtualTable1.LoadFromStream(ms);
      VirtualTable1.Open;
    finally
      ms.free;
    end;

    遇到中文内容时,个别情况下会触发解析异常错误,查看XML都很正常,就是有汉字而已,估计是编码问题处理的不好导致。并且字段属性没有被赋值过来,后来改成如下模式:

    class function TPublicTools.CopyDataSet(ASourceDataSet : TOraDataSet;
      ADestDataSet : TVirtualTable): Boolean;
    var
      i: Integer;
    begin
      Result := False;
      if not (ASourceDataSet.Active and Assigned(ADestDataSet)) then
        Exit;
      //复制数据集 ,其实就这么简单
      ADestDataSet.Assign(ASourceDataSet);
      //开启内存表
      ADestDataSet.Open;
      //处理字段格式
      for i := 0 to ADestDataSet.Fields.Count -1 do
      begin
        ADestDataSet.Fields[i].Visible :=
          ASourceDataSet.FieldByName(ADestDataSet.Fields[i].FieldName).Visible;
        ADestDataSet.Fields[i].DisplayLabel :=
          ASourceDataSet.FieldByName(ADestDataSet.Fields[i].FieldName).DisplayLabel;
        ADestDataSet.Fields[i].DisplayWidth :=
          ASourceDataSet.FieldByName(ADestDataSet.Fields[i].FieldName).DisplayWidth;
        if ADestDataSet.Fields[i] is TFloatField then
          TFloatField(ADestDataSet.Fields[i]).DisplayFormat :=
            TFloatField(ASourceDataSet.FieldByName(ADestDataSet.Fields[i].FieldName)).DisplayFormat;
      end;
      Result := ADestDataSet.Active;
    end;

    直接用Assign来实现数据复制,效果很好,其实处理问题应该考虑简单点。

  • 相关阅读:
    html页面模板布局内容的继承,block
    url分发
    显示年月,注册页面和后台数据交互,不涉及数据库
    static文件夹中文件引用方式,如html页面引用js
    pycharm写django之返回一个页面
    pycharm编写django第一步
    VUE清除keepalive页面缓存
    js设置html根节点的style字体【Vue动态调整全局字体大小】
    npm 依赖重新安装或更新版本
    antd 自定义表头slots.title不生效
  • 原文地址:https://www.cnblogs.com/ChinaEHR/p/4536721.html
Copyright © 2011-2022 走看看