加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi中 clientdataset使用方法

发布时间:2020-12-15 09:56:55 所属栏目:大数据 来源:网络整理
导读:1.基本情况介绍; clientdataset内存表,他的data属性存放的是数据, delta 增量记录的是日志, 就相当于数据库的 savepoint保存点;每当clientdataset的数据有变化时(onbeforeedit,onafteredit),savepoint都会变化。如果我们想取消一段时间的操作,我们可

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; 然后将clientdataset的remoteserver 指向 socketserver; clientdataset的dataprovider设置为服务器上的datasetprovider 服务器上放上dataprovider即可。

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

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

      //辅助字段
      Add('GDName',120,False);
      Add('Note',255,False);
      Add('LSTINPRC',ftFloat,False);
    end;
    IndexDefs.Add('','Line',[ixPrimary]);
    CreateDataSet;
    Append;
  end;
procedure TForm1.FormCreate(Sender: TObject);
begin
? self.ds1.FieldDefs.Add('Name',50);
? self.ds1.FieldDefs.Add('Age',50);
? self.ds1.CreateDataSet;
? self.ds2.FieldDefs.Add('Name',50);
? self.ds2.FieldDefs.Add('Age',50);
? self.ds2.CreateDataSet;
?
? 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里面的日志复制到另一个数据集,然后遍历记录,看看修改过的日志。就可以找到修改过的数据了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读