博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ODAC (V9.5.15) 学习笔记(二十一)数据复制
阅读量:6038 次
发布时间:2019-06-20

本文共 1362 字,大约阅读时间需要 4 分钟。

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

转载地址:http://gjrhx.baihongyu.com/

你可能感兴趣的文章
Spring Boot 配置优先级顺序
查看>>
php 信号量
查看>>
C++中构造函数详解
查看>>
数据库课程实习设计——酒店房间预订管理系统
查看>>
vue.js的模板渲染
查看>>
关于H5+css3的一些简单知识
查看>>
Google-Authenticator
查看>>
FOJ有奖月赛-2015年11月 Problem A
查看>>
电商网站中添加商品到购物车功能模块2017.12.8
查看>>
android 模拟器 hardWare 属性说明
查看>>
六款值得推荐的android(安卓)开源框架简介
查看>>
max_element( )
查看>>
CSS Grid 布局
查看>>
接口的幂等性
查看>>
java中的类
查看>>
android 自定义文字跑马灯 支持拖拽,按住停止滚动,自定义速度
查看>>
SpringMVC完成文件上传的基本步骤
查看>>
实例168 使用指针输出数组元素
查看>>
bind 与unbind
查看>>
CSS: Flexbox
查看>>