delphi中 clientdataset使用方法

原创 2016年08月31日 19:39:39

1.基本情况介绍; clientdataset内存表,他的data属性存放的是数据, delta 增量记录的是日志, 就相当于数据库的 savepoint保存点;每当clientdataset的数据有变化时(onbeforeedit, onafteredit),savepoint都会变化。如果我们想取消一段时间的操作,我们可以先记录下这个savepoint,然后修改,如果想取消,直接让这个savepoint = 以前的那个点即可。

try this

var 
  BaseLine:Integer;
begin
  with ClientDataSet1 do
  begin
    BaseLine:=SavePoint;
    Insert;
    FieldByName('Name').AsString:= Edit1.Text;
    FieldByName('Weight').AsInteger:= StrToInt(Edit2.Text);
    if 提交 then
      MergeChangeLog
    else //取消
      SavePoint:=BaseLine;
  end;
end;

2. clientdaset可以不连接数据库直接使用,如果设置了clientdataset的filename属性,那么在数据集打开或者关闭的时候,都会将数据集里的数据保存到对应的文件中,这个过程是会合并日志的。也就是说你编辑到什么状态,然后下次打开还是什么状态。

3.mergechangelog; 就是将 delta里面的操作日志跟 data合并,

4.emptydataset,清空数据集。

5.三层服务的构造方法,在客户端放上clientdataset, 然后放上socketconnect; webconnection是不是也可以?然后将clientdataset的remoteserver 指向 socketserver; clientdataset的dataprovider设置为服务器上的datasetprovider 服务器上放上dataprovider即可。provide里面有个onrequest命令,可以接受客户端发过来的命令。

6.创建内存表:createdataset,创建数据集。

 //明细表内存对象创建
  with cdsDtl do
  begin
    with FieldDefs do
    begin
      Clear;
      //数据库字段
      Add('Num', ftString, 14, False);
      Add('Cls', ftString, 10, False);
      Add('Line', ftInteger, 0, False);
      Add('GDCode', ftString, 20, False);
      Add('sl', ftInteger, 0, False);
      Add('GID', ftInteger, 0, False);
      //ToDo 增加业务明细字段

      //辅助字段
      Add('GDName', ftString, 120, False);
      Add('Note', ftString, 255, False);
      Add('LSTINPRC', ftFloat, 0, False);
    end;
    IndexDefs.Add('','Line',[ixPrimary]);
    CreateDataSet;
    Append;
  end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  self.ds1.FieldDefs.Add('Name',ftString,50);
  self.ds1.FieldDefs.Add('Age',ftString,50);
  self.ds1.CreateDataSet;
  self.ds2.FieldDefs.Add('Name',ftString,50);
  self.ds2.FieldDefs.Add('Age',ftString,50);
  self.ds2.CreateDataSet;
 
  self.ds1.AppendRecord(['100','100']);
  self.ds1.AppendRecord(['100','100']);
  self.ds1.AppendRecord(['100','100']);
  self.ds1.AppendRecord(['100','100']);
  self.ds1.AppendRecord(['100','100']);
  self.ds1.AppendRecord(['100','100']);
  self.ds2.Data:=self.ds1.Delta;
end;


procedure TForm1.btn1Click(Sender: TObject);
begin
  self.ds1.AppendRecord(['1001','100']);//添加新纪录
  self.ds2.Data:=self.ds1.Delta;
end;

李维的书,有空还是看看吧。

提交数据的时候,记得applyupdates(-1,0.3),分别是提交正常的,不管不正常的了,0出错,允许3个出错。


如果我想要通过sql语句更新客户修改的数据,那么我们可以这样做

再放一个ClientDataSet2,用ClientDataSet2.Data=ClientDataSet1.Delta;
while not ClientDataSet2.Eof do
case  ClientDataSet2.UpdateStatus of
usDeleted:
XXX
通过将原 clientdataset里面的日志复制到另一个数据集,然后遍历记录,看看修改过的日志。就可以找到修改过的数据了。


Clientdataset在处理几千行数据还是很快的,要是处理上万行数据,是比较慢的。

ClientDataSet1.IndexFieldNames:='列1;列2'; 添加索引

if ClientDataSet1.FindKey([这里填什么?,X]) then 查找字段。

if ClientDataSet1.State in [DsEdit, DSInsert] then  ClientDataSet1.Post;
  if ClientDataSet1.ChangeCount > 0 then
    begin
    if ClientDataSet1.ApplyUpdates(0) = 0 then         ClientDataSet1.MergeChangeLog;
      end
    else
      abort;
    end
  else
    exit;
changecount,可以看出数据集是否有改动。

相关文章推荐

Delphi中ClientDataSet的用法小结

Delphi中ClientDataSet的用法小结 博客分类:  Delphi         TClientDataSet控件继承自TDataSet,其数据存储文件格式扩...
  • WaveYang
  • WaveYang
  • 2014年06月24日 20:48
  • 20632

ClientDataSet的用法

ClientDataSet的用法 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件。该控件封装了对数据进行操作处...

delphi7 clientdataset 详解

delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.A...

ClientDataSet使用方法

ClientDataSet 探讨 1.     与TTable、TQuery一样,TClientDataSet也是从TDataSet继承下来的,它通常用于多层体系结构的客户端。很多数据库应用程序都用了...

ClientDataSet初步使用

用Delphi以来,一直在用TSimpleDataset控件,因为它方便,但有人对我说,TSimpleDataSet不好,最好还是用TClientDataSet。一开始还不以然认为很方便,还没发现什么...

DELPHI ClientData使用详解

转自http://hi.baidu.com/%B6%C0%C7%E9%B1%F9%D0%C4/blog/item/de918639d9fde2ff55e723fa.html 在三层结构中,TClie...

Delphi clientdataset的详细介绍

delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.A...

Delphi ClientDataSet复制记录

数据源记录集:ClientDataSetSource;目标记录集:ClientDataSetCopy 1)复制一条记录。   ClientDataSetCopy.Close;   ClientData...

Delphi clientdataset的详细介绍

delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.A...

Delphi中ClientDataSet的数据查找

Delphi中ClientDataSet的数据查找 博客分类:  Delphi   ClientDataSet的数据查找。 我所介绍的心得和技巧都是用ClientData...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中 clientdataset使用方法
举报原因:
原因补充:

(最多只允许输入30个字)