TClientDataSet使用要点

  TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件
型数据存储和操作的控件。该控件封装了对数据进行操作处理的接口和功能,而本身并不依
赖上述几种数据库驱动程序,基本上能满足单机"瘦"数据库应用程序的需要。

一、TClientDataSet的基本属性和方法介绍

  1).FieldDefs: 字段定义列表属性

  开发者可通过单击属性编辑器中该属性编辑按钮,或在该控件上单击右键选择弹出菜单
中的"Fields Editor"菜单进行字段编辑。设置完此属性后,实际上就相当于定义了表的结构
;如果想装入已有的数据表的结构和数据,可通过单击右键选择弹出菜单中的"Assign Loca
l Data"菜单,从弹出对话框中选取当前窗体中已与数据库连接好的数据集控件名称即可(当
前窗体中必须已放置好要套用的数据集控件并打开激活)。

  使用注意:

  对于自定义的字段名表,该属性编辑完后,该控件仍然无法打开。必须右键单击该控件
,选择弹出菜单中的"Create DataSet"菜单,让该控件以上述编辑的字段列表为依据,创建
数据集后,才能够被激活打开和使用。否则,会出现类似"ClientDataSet1: Missing data
provider or data packet."的错误(包括在运行期,运行期可调用该控件的CreateDataSet
方法,从而动态定义字段和表)。

  2).FileName属性

  说明:数据存储文件的名称。

  因该控件是基于文件型的数据操作控件,因此,必须指定所操作的数据文件名称(默认
扩展名称.cds),从而打开和激活该控件,进而进行数据编辑。

  例1:利用此属性打开指定的.cds文件

var
Path: string;
begin
 Path := ExtractFilePath(Application.ExeName); //取得可执行文件路径
 CDataSet1.FileName := Path + 'test.cds';
 CDataSet1.Open;
end;

  3).CreateDataSet方法

  说明:该方法以FieldDefs中的字段名表为结构建立数据集,常用来进行动态定义表。

  例2:动态创建一具有姓名和年龄两个字段的数据集。

//创建字段名表
CDataSet.FieldDefs.Clear;
with CDataSet.FieldDefs.AddFieldDef do
begin
 Name := 'Name';
 Size := 10;
 DataType := ftString;
end;
with CDataSet.FieldDefs.AddFieldDef do
begin
 Name := 'Age';
 DataType := ftInteger;
end;
 //动态创建数据集
 CDataSet.CreateDataSet;
 //激活和打开该数据集
 CDataSet.Open;

  4).Open方法

  说明: 打开和激活数据集控件,从而进行数据编辑。

  a. 如果指定了FileName属性,则直接用Open方法即可打开和激活该控件,见例1。

  b. 如果未指定FileName属性,可使用例2方法动态创建和打开数据集,进而操作数据。

  5).LoadFromFile和SaveToFile

  说明:从文件中装入表结构和数据以及存储数据到文件。该方法类似于Word中的打开新
文件和另存为的功能。

  例3:将数据集的数据存储到指定文件中

  CDataSet.SaveToFile('c:\windows\desktop\test.cds');

  6).First(到首),Prior(向前),Next(向后),Last(到尾),Edit(编辑),CanCel(取
消编辑),Post(保存),Insert(插入记录),Append(添加记录),Delete(删除),Refresh
(数据刷新)等数据集常用方法

  说明:当指定了FileName属性时,其Post方法可将数据存入指定的文件中,类似其SaveT
oFile方法;如果未指定存储文件名,则Post方法只将数据存储在RAM中。其它方法,同一般
数据集控件使用方法,略。

  7).Filter, Filtered: 过滤筛选属性

  说明:用于筛选指定条件的记录,用法同一般数据集控件,略。

  例4:在已经激活打开的数据集中筛选性别为男性的记录

CDataSet.Close;
CDataSet.Filter := '性别=''' + '男' + '''';
CDataSet.Filtered := True;
CDataSet.Open;

二、使用TClientDataSet控件的应用程序发布的注意事项:

  如前所述,使用TClientDataSet控件的程序发布时不需要任何数据库驱动程序,大大节
省了安装文件的大小。但是,在发布程序时别忘了将Windows系统目录下midas.dll(257KB)与
应用程序一起发布(运行必须),否则,程序仍然无法正常运行。

三、结束语

  通过使用Delphi中TClientDataSet控件,既实现了应用程序可彻底脱离数据库驱动程序
,也实现了常规数据集控件简单易用的特性,为编写"瘦"数据库应用程序提供了一种技术方
法和手段。

  上述程序在Pwindows98,Delphi5下测试通过。

  TClientDataSet在三层结构中,TClientDataSet的地位是不可估量的,她的使用正确与
否,是十分关键的,本文从以下几个方面阐述她的使用,希望对你有所帮助.

1.动态索引
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if (not column.Field is Tblobfield) then//Tblobfield不能索引,二进制
ClientDataSet1.IndexFieldNames:=column.Field.FieldName;
end;

2.多层结构中主从表的实现

设主表ClientDataSet1.packetrecord为-1,所有记录
设从表ClientDataSet1.packetrecord为0,当前记录

3.Taggregates使用
(1)在字段编辑中add new field类型为aggregates
后设置expression(表达试)
设置active:=true即可
使用dbedit的field为前者即可
(2)使用Aggergates属性add设计表达试
调用
  showmessage(floattostr(ClientDataSet1.Aggregates.Count));
  showmessage(ClientDataSet1.Aggregates.Items[0].Value);
 
4.在单层数据库中不要BDE
使用ClientDataSet代替table,使用ClientDataSet的loadfilename装入cds
代替table的tablename的db或者dbf
原来的程序改造方法:
加一个ClientDataSet,使用右键assign locate data
后savetofile,再loadfromfile,后删除table
将原连table的datasource设为ClientDataSet
唯一注意的是:要将midas.dll拷到system或者当前目录
5.三层结构的公文包的实现方法
同时设定1:filename(*.cds)2.remote server
6.可以对data赋值(从另一个数据集取值)
ClientDataSet2.Data:=ClientDataSet1.Data;
ClientDataSet2.Open;
或者
ClientDataSet2.CloneCursor(ClientDataSet1,true);
ClientDataSet2.Open;
7.附加数据取得
客户程序向应用服务器请求数据。如果TClientDataSet 的
FetchOnDemand 属性设为True,
客户程序会根据需要自动检索附加的数据包如BLOB字段的值或嵌套表的内容。
否则,
客户程序需要显式地调用GetNextPacket 才能获得这些附加的数据包。
ClientDataSet的packetrecords设置一次取得的记录个数
8.ClientDataSet与服务器端query连接方法
(1)sql内容为空
ClientDataSet1.Close;
ClientDataSet1.CommandText:=edit1.Text;//即sql内容
ClientDataSet1.Open;
对于没有应用服务器设置filter 如:country like 'A%'
filtered=true可实现sql功能
(2)有参数
如服务端query的sql为
select * from animals
where name like :dd
则:客户端ClientDataSet
var
pm:Tparam;
begin
ClientDataSet1.Close;
ClientDataSet1.ProviderName:='DataSetProvider1';
pm:=Tparam.Create(nil);
pm.Name:='dd';
pm.DataType:=ftString;
ClientDataSet1.Params.Clear;
ClientDataSet1.Params.AddParam(pm);
ClientDataSet1.Params.ParamByName('dd').AsString:=edit1.Text ;
ClientDataSet1.Open;
pm.Free;
end;

9.数据的更新管理
(1)savepoint 保存目前为止数据状态,可以恢复到这个状态
var
pp:integer;
begin
pp:=ClientDataSet1.SavePoint;
ClientDataSet1.Edit;
ClientDataSet1.FieldByName('姓名').asstring:='古话';
ClientDataSet1.Post;
table1.Refresh;
end;
恢复点
ClientDataSet1.SavePoint:=pp;
(2)cancel,RevertRecord
取消对当前记录的修改,只适合没有post的,如果post,调用
RevertRecord
(3)cancelupdate
取消对数据库所有的修改
(4)UndoLastChange(boolean),changecount
取消上一次的修改,可以实现连续撤消
参数为true:光标到恢复处
false:光标在当前位置不动
changecount返回修改记录的次数,一个记录修改多次,返回只一次
但UndoLastChange只撤消一次

10.可写的recno
对于Ttable和Tquery的recno是只读的,而TClientDataSet的recno可读可写
ClientDataSet1.recno:=5;是设第五个记录为当前记录
11.数据保存
对于table使用post可更新数据
而ClientDataSet1的post只更新内存数据,要更新服务器数据要使用
ApplyUpdates(MaxErrors: Integer),他有一个参数,是允许发出错误的
次数,-1表示无数次,使用simpleobjectbroker时常设为0,实现自动容错和负载平衡

 

转载于:https://www.cnblogs.com/spiritofcloud/p/3980370.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动窗口在重构数据集的作用

step1:使用滑动窗口重构数据集 给定时间序列数据集的数字序列,我们可以将数据重构为看起来像监督学习问题。 我们可以通过使用以前的时间步作为输入变量并使用下一个时间步作为输出变量来做到这一点。 通过观察重构后的数据集与原本的时间序列&…

sliverlight - Unhandled Error in Silverlight Application错误

使用firebug控制台输出错误: Unhandled Error in Silverlight Application 查询“GetFlow_Process”的 Load 操作失败。远程服务器返回了错误: NotFound。 位于 System.ServiceModel.DomainServices.Client.OperationBase.Complete(Exception error) 位于 System.S…

前向验证对于模型的更新作用

首先,让我们看一个小的单变量时间序列数据,我们将用作上下文来理解这三种回测方法:太阳黑子数据集。该数据集描述了刚刚超过 230 年(1749-1983 年)观察到的太阳黑子数量的每月计数。 数据集显示了季节之间差异很大的…

2014年9月21日_随笔,jdic,ETL,groovy,Nutz好多东西想学

(1)老妈十一要回老家,才突然发现买票好难啊。有亲朋很重要 (2)这周我做了什么。jdic,ETL,groovy, Nutz好多东西想学。 Nutz开发成员专访、Nutz优酷视频(演讲)、Nutz 入门教程、 (3)想改变&#…

PHP-面向对象(八)

1、多态的介绍与优势 多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。…

双指数平滑中参数对于预测模型的影响

先看看α 在β一致的情况下,α越小,模型越滞后。 再看看β 在α一致的情况下,β越大,模型对于趋势的预测更敏锐。

SQL 性能不佳的几个原因

SQL 性能不佳的几个原因 •不准确的统计数据•差劲的索引•差劲的查询设计 •差劲的执行计划,通常是由不正确的参数引起的•过度阻塞和死锁 •非基于集合的操作•不良数据库设计 •过度碎片 •不能重复使用执行计划 •查询频繁重编译 •不当使用游标 •数据库日志的…

分页查询

分页查询算是比较常用的一个查询了在DAO层主要是查两个数据第一个总条数第二个要查询起始记录数到查询的条数当第一次点击查询时候(非下一页时Page类里面预设的就是 index就是0 pageSize是预设值当点击下一页的时候 index 和 pageSize带的就是页面上面给的值了分页的页面一般的…

TypeError: Object of type ‘datetime‘ is not JSON serializable

python中这个错误的原因是json.dumps无法对字典中的datetime时间格式数据进行转化,dumps的原功能是将dict转化为str格式,不支持转化时间. 所以请这样使用: json.dumps(response_data, defaultstr)

oracle问题

ORA-01031: insufficient privileges 用户没有权限,给它赋予角色转载于:https://www.cnblogs.com/50614090/p/3986880.html

me23n去价格

SELECT knumv kposn AS ebelp kschl kbetr kpein kwert INTO CORRESPONDING FIELDS OF TABLE gt_konv FROM konv FOR ALL ENTRIES IN gt_ekpo WHERE knumv gt_ekpo-knumv AND kinak EQ AND kschl IN (PB00,PBXX,P101).转载于:…

Fix “Windows cannot access the specified device path or file” Error

http://helpdeskgeek.com/help-desk/windows-cannot-access-the-specified-device-path-or-file/ Method 1 – Windows Server 2003 Terminal Services Firstly, if you’re running into this issue on a Windows Server box running Terminal Services, your problem can be …

使用Bootstrap-table创建表单,并且与flask后台进行数据交互

文章目录引用css和js使用htmljavascriptflaskmysql参考引用css和js Bootstrap-table为这些文件提供了 CDN 的支持&#xff0c;所以不需要下载.js .css文件就可以直接用了&#xff0c;十分方便 <!-- Latest compiled and minified CSS --> <link rel"stylesheet…

php编码规则(一)

---恢复内容开始--- <转载自己整理> GNU C 库&#xff08;GNU C Library&#xff0c;又称为glibc&#xff09;是一种按照LGPL许可协议发布的&#xff0c;公开源代码的&#xff0c;免费的&#xff0c;方便从网络下载的C的编译程序。 GNU C运行期库&#xff0c;是一种C函数…

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件...

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件[源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传…

【经验贴】smartCarers在比赛后如何获取更好的发展

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 由于最近专栏开了付费,群友让更新一些经验贴,于是有了这篇文章。 一般来说,比赛完了之后是大二结束的暑假,此时有这么几条…

isset()和empty()到底区别是什么。

一招鲜吃遍天&#xff0c;自从看了燕十八关于PHP变量内部机制的那课&#xff0c;解释了一些很久的疑惑&#xff0c;知其然还知其所以然&#xff0c;果然是学习的最佳途径&#xff0c;比背下来要重要N倍。 我们知道一个变量有变量表的位置&#xff0c;然后他指向自己的内存地址&…

html清除图片缓存

img.src ?t(new Date()); 如&#xff1a; <img id "5" src"../../../pics/prod_146/__INLINE__user_nums_cmp_146.png?t"(new Date()) width"1024">

分享下自己编译 XBMC 的过程(zhuan)

刷YunOS赢魅族MX3首先要感谢下网上其他网友的经验&#xff0c;没有这些经验有的问题还是不太好解决&#xff5e; 先介绍下编译环境&#xff0c;操作系统是 CentOS 6.5 64位 (最小桌面版本安装&#xff0c;除了最基本的组件外&#xff0c;类似 java 什么的都没有安装)&#xff0…

使用Xcode和Instruments调试解决iOS内存泄露

虽然iOS 5.0版本之后加入了ARC机制&#xff0c;但由于相互引用关系比较复杂时&#xff0c;内存泄露还是可能存在。所以了解原理很重要。 这里讲述在没有ARC的情况下&#xff0c;如何使用Instruments来查找程序中的内存泄露&#xff0c;以及NSZombieEnabled设置的使用。 本文假设…