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,当前记录sql

 
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,实现自动容错和负载平衡
相关文章
相关标签/搜索