zoukankan      html  css  js  c++  java
  • DELPHI ClientData使用详解

    在三层结构中,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,实现自动容错和负载平衡
  • 相关阅读:
    Dom元素的属性-卓有成效的使用
    我们90后的爱情
    Spring MVC 注解自学笔记(四) @Value
    Spring MVC学习笔记(三) @Resource
    Spring MVC学习笔记(二) 视图解析器 web请求六个阶段
    IntelliJ IDEA集成开发环境IDE自学之路
    Spring MVC注解学习笔记(一)
    持之以恒 技术是个漫长路
    JavaSE-note1-随机访问类RandomAccessFile
    [转]WINDOWS下VIM配置
  • 原文地址:https://www.cnblogs.com/jijm123/p/11272055.html
Copyright © 2011-2022 走看看