delphi中 clientdataset使用方法
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里面的日志复制到另一个数据集,然后遍历记录,看看修改过的日志。就可以找到修改过的数据了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |