在三层结构中,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
    后设置 Exp ression
    设置 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,实现自动容错和负载平衡

DELPHI ClientData使用详解的更多相关文章

  1. delphi 资源文件详解

    delphi资源文件详解 一.引子: 现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便 ...

  2. Delphi TStringHelper用法详解

    Delphi TStringHelper用法详解 (2013-08-27 22:45:42) 转载▼ 标签: delphi_xe5 it 分类: Delphi Delphi XE4的TStringHe ...

  3. delphi TStringList 用法详解

    转自: http://blog.163.com/you888@188/blog/static/67239619201472365642633/ delphi TStringList 用法详解 2014 ...

  4. Delphi中TApplication详解

    转自:http://blog.sina.com.cn/s/blog_4d6f55d90100bmv9.html TApplication是用于Delphi应用程序的类型,该类在单元forms中声明.T ...

  5. Delphi中TApplication详解(转仅供自己参考)

    转自:http://blog.sina.com.cn/s/blog_4d6f55d90100bmv9.html TApplication是用于Delphi应用程序的类型,该类在单元forms中声明.T ...

  6. 【delphi】关键字详解

    absolute {它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同.} var Str: ]; StrLen: Byte absolute Str; {这个声明指定了变量StrLe ...

  7. delphi 窗体透明详解TransparentColorValue,窗体透明控件不透明

    关于窗体透明的做法 来自:http://blog.csdn.net/shuaihj/article/details/8610343 关于窗体透明的做法 1.在Delphi中,设置窗体的AlphaBle ...

  8. Delphi Application.MessageBox详解

    引数:1. Text:要显示的讯息2. Caption:讯息视窗的标题列文字3. Flags:讯息旗标     3.1. 可指定讯息视窗上的图示     3.2. 可指定讯息视窗出现的按钮     3 ...

  9. Delphi IDHTTP用法详解(六种用法)

    一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...

随机推荐

  1. python __file__ is not defined 解决方法

    python __file__ is not defined 解决方法 __file__ 是在python module 被导入的时候生成的一个变量,所以在 __file__ 不能被使用,但是又想获取 ...

  2. HashMap源码分析一

           HashMap在java编程中,算使用频率top10中的类了.这里是关于HashMap的源码的分析.一个类的源码分析,要看他的来龙去脉,他的历史迭代.一来从以前的版本开始分析,由易到难: ...

  3. mysql基础_操作文件中的内容

    1.插入数据: insert into t1(id,name) values(1,'alex'); #向t1表中插入id为1,name为'alex'的一条数据 2.删除: delete from t1 ...

  4. es高级用法之冷热分离

    背景 用户需求:近期数据查询速度快,较远历史数据运行查询速度慢? 对于开发人员而言即数据的冷热分离,实现此功能有2个前提条件: 硬件:处理速度不同的硬件,最起码有读写速度不同的硬盘,如SSD.机械硬盘 ...

  5. linux学习19 shell脚本基础-bash脚本编程基础及配置文件

    一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由 ...

  6. java实现简单的单点登录 (转)

    摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...

  7. 自定义类似smarty模板

    自定义类封装模板解析功能 原理其实比较简单,就是把html文件解析为一个超级字符串,然后把类似{{$mytitle}}这种结构的变量进行替换(str_replace)当然,实际中这样做可能导致频繁的磁 ...

  8. 第四届西安邮电大学acm-icpc校赛 猜球球

    题目描述 六一到了,为了庆祝这个节日,好多商家都推出了很多好玩的小游戏.Tongtong看到了一个猜球球的游戏,有n种除了颜色之外完全相同的球,商家从中拿出来一个球球放到了箱子里,已知第i种颜色的球出 ...

  9. 【CUDA 基础】6.0 流和并发

    title: [CUDA 基础]6.0 流和并发 categories: - CUDA - Freshman tags: - 流 - 事件 - 网格级并行 - 同步机制 - NVVP toc: tru ...

  10. Java面向对象5(V~Z)

    计算各种图形的周长(接口与多态)(SDUT 3338) import java.util.Scanner; public class Main { public static void main(St ...