ClientDataSet中使用Post提交变更的数据时,实际上并没有更新到后端数据库中,而是提交到了由DataSnap管理的数据缓冲区中。当使用了ClientDataSet.ApplyUpDates(MaxErrors:integer)方法才更新到数据库中。ApplyUpDates方法也只更新修改的数据,这些数据放在ClientDataSet.Delta属性中。调用AppplyUpDates更新到数据库的同时Delta中的数据也会被清空,注意最后的对话框。下面对数据进行修改,删除等操作,并查看Delta中的数据。

效果图:

**************************************************************************************

具体操作:

**************************************************************************************

连接DBGrid1:

DBGrid1.DataSource->DataSource1.DataSet->ClientDataSet1.ProviderName->DataSetProvider1.DataSet->

SQLDataset1.SQLConnection->SQLConnection1具体数据库(这里连接的是oracle中的EMP表);

SQLDataSet1.CommandText:=SELECT * FROM EMP;ClientDataSet1.Active:=true;

DBNavigator1.DataSource->DataSource1;

连接DBGrid2:

DBGrid2.DataSource->DataSource2.DataSet->ClientDataSet2;

将以上用到的控件放入一空白工程中,并按上面的设置连接好控件。

**************************************************************************************

相关CODE:

**************************************************************************************

procedure TForm3.Button1Click(Sender: TObject);
begin
// 删除和添加数据不触发AfterPost事件,手动赋值
// 把ClientDataSet1的Delta中的数据给ClientDataSet2中的Data属性,让DBGrid2显示处理数据的细节
ClientDataSet2.Data := ClientDataSet1.Delta;
StatusBar1.Panels[].Text := format('Delta数据计数:%d',
[ClientDataSet2.RecordCount]);
end; procedure TForm3.Button2Click(Sender: TObject);
begin
// 将修改的数据提交到数据库,0表示不允许发生错误
ClientDataSet1.ApplyUpdates();
ClientDataSet2.Data := ClientDataSet1.Delta;
end; procedure TForm3.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
// 把ClientDataSet1的Delta中的数据给ClientDataSet2中的Data属性,让DBGrid2显示处理数据的细节
ClientDataSet2.Data := ClientDataSet1.Delta;
StatusBar1.Panels[].Text := format('Delta数据计数:%d',
[ClientDataSet2.RecordCount]);
end;

ClientDataSet中修改,删除,添加数据和Delta属性的更多相关文章

  1. freemarker中修改和添加功能中包含checkbox复选框默认选中需求的解决方式

    今天做的公司ERP系统上线第一天内部使用的,各种BUG铺天盖地,[虽然只是技术总监一个人在测试……],其中有一个就是其中部门管理页面中的修改和添加功能 一个人做一套ERP总是有点疏漏的,虽然里面的东西 ...

  2. 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法

    第二篇文章测试说明 开发测试中,难免会存在一些重复行数据,因此常常会造成一些测试异常. 下面简单测试mysql表删除重复数据行的相关操作. 主要通过一下三个大标题来测试说明: 02.尝试删除dept_ ...

  3. 【WinForm】线程中向listview添加数据

    在使用listview的时候,因为处理的数据较多,为防止在处理数据时出现假死的状态出现卡的情况,我们使用委托进行处理添加数据 定义委托 private delegate void AddListVie ...

  4. oracle数据库中修改已存在数据的字段

    在oracle中,如果已经存在的数据的某些列,假如要更换类型的话,有的时候是比较麻烦的, 会出现:ORA-01439: column to be modified must be empty to c ...

  5. matchmove流程中修改Maya相机数据的脚本

    matchmove组的流程涉及到syntheyes与maya,nuke交接的问题.syntheyes会生成包含去畸变节点的nuke工程 和带跟踪信息的maya工程.在nuke工程上渲染得到去畸变的序列 ...

  6. Oralce中SQL删除重复数据只保留一条(转)

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...

  7. WebForm在JS中从Dropdownlist添加数据,在C#段读取

    (1)页面设置和JS代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def ...

  8. 因为要生成的折线数量是不定的 ,所以需要echarts 动态的为option中的Series添加数据

    series:function(){ var serie=[]; var aa = zhonglei[0].split(","); for( var i=0;i < aa.l ...

  9. MySQL中修改多个数据表的字段拼接问题

    错误1: 异常:Truncated incorrect DOUBLE value: 'lili' 问题分析:我的修改sql语句是:update video set vname='汉字' and vdi ...

随机推荐

  1. MySQL之JDBC插入、修改、删除封装集于一个方法

    1. 先建四个包 ① com.tz.entity 实体包 ② com.tz.dao 数据访问层包 -> com.tz.dao.impl 实现包 ③ com.tz.util 工具类包 ④ com. ...

  2. ***PHP preg_match正则表达式的使用 转载:https://www.cnblogs.com/kenshinobiy/p/4443600.html

    第一,让我们看看两个特别的字符:‘^’和‘$’他们是分别用来匹配字符串的开始和结束,以下分别举例说明 : "^The": 匹配以 "The"开头的字符串; &q ...

  3. 推荐python入门书籍(爬虫方面)

    学爬虫,需要理论与实践相结合,Python生态中的爬虫库多如牛毛,urllib.urllib2.requests.beautifulsoup.scrapy.pyspider都是爬虫相关的库,但是如果没 ...

  4. 远程jupyter+pycharm配置

    前言 作为一个数据工程师,最喜欢的事情就是不停的在现实的服务端环境调试代码的参数.我们在本地的环境与生产的状况决然不同,我们一开始在本地写代码测试再部署到服务端的三板斧就不适用了. 最好的方式可以直接 ...

  5. ubuntu下卸载旧Mysql并安装新Mysql(升级)

    由于从apt-get下安装的Mysql不是最新版的,所以,需要升级.先卸载,再安装. 1.卸载 先看mysql是否在运行: netstat -tap | grep mysql 然后 sudo apt- ...

  6. UOJ#467. 【ZJOI2019】线段树 线段树,概率期望

    原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day1T2.html 前言 在LOJ交了一下我的代码,发现它比选手机快将近 4 倍. 题解 对于线段树上每一个节 ...

  7. 异步协程asyncio+aiohttp

    aiohttp中文文档 1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序 ...

  8. 安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题

    https://stackoverflow.com/questions/38605734/mac-cannot-find-eigen3 https://blog.csdn.net/qq_4214518 ...

  9. Tkinter 之Combobox下拉

    一.参数说明 语法 作用 cv = tk.stringVar() 绑定变量 com = ttk.Combobox(root, textvariable=cv) 创建下拉框 com.pack() 放置下 ...

  10. ICEM-一种三维Y型网格

    ​原视频下载地址:https://yunpan.cn/cLHD9ewat8v9a  访问密码 0f0f