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来实现数据复制,效果很好,其实处理问题应该考虑简单点。

  • 相关阅读:
    Ansible 简单使用
    修改Elasticsearch的settings
    Nginx ssl证书部署
    配置 Haproxy 防范 DDOS 攻击
    Sort命令使用
    Haproxy ssl 配置方式
    MySQL连接线程kill利器之pt-kill
    percona-toolkit工具包的安装和使用
    Centos7 禁止firewalld并使用iptables 作默认防火墙以及忘记root密码的处理方法
    pt-query-digest查询日志分析工具
  • 原文地址:https://www.cnblogs.com/ChinaEHR/p/4536721.html
Copyright © 2011-2022 走看看