ClientDataSet中修改,删除,添加数据和Delta属性
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属性的更多相关文章
- freemarker中修改和添加功能中包含checkbox复选框默认选中需求的解决方式
今天做的公司ERP系统上线第一天内部使用的,各种BUG铺天盖地,[虽然只是技术总监一个人在测试……],其中有一个就是其中部门管理页面中的修改和添加功能 一个人做一套ERP总是有点疏漏的,虽然里面的东西 ...
- 【MySQL】测试MySQL表中安全删除重复数据只保留一条的相关方法
第二篇文章测试说明 开发测试中,难免会存在一些重复行数据,因此常常会造成一些测试异常. 下面简单测试mysql表删除重复数据行的相关操作. 主要通过一下三个大标题来测试说明: 02.尝试删除dept_ ...
- 【WinForm】线程中向listview添加数据
在使用listview的时候,因为处理的数据较多,为防止在处理数据时出现假死的状态出现卡的情况,我们使用委托进行处理添加数据 定义委托 private delegate void AddListVie ...
- oracle数据库中修改已存在数据的字段
在oracle中,如果已经存在的数据的某些列,假如要更换类型的话,有的时候是比较麻烦的, 会出现:ORA-01439: column to be modified must be empty to c ...
- matchmove流程中修改Maya相机数据的脚本
matchmove组的流程涉及到syntheyes与maya,nuke交接的问题.syntheyes会生成包含去畸变节点的nuke工程 和带跟踪信息的maya工程.在nuke工程上渲染得到去畸变的序列 ...
- Oralce中SQL删除重复数据只保留一条(转)
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- WebForm在JS中从Dropdownlist添加数据,在C#段读取
(1)页面设置和JS代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def ...
- 因为要生成的折线数量是不定的 ,所以需要echarts 动态的为option中的Series添加数据
series:function(){ var serie=[]; var aa = zhonglei[0].split(","); for( var i=0;i < aa.l ...
- MySQL中修改多个数据表的字段拼接问题
错误1: 异常:Truncated incorrect DOUBLE value: 'lili' 问题分析:我的修改sql语句是:update video set vname='汉字' and vdi ...
随机推荐
- LOJ 103子串查找——用hash代替kmp算法
题意 给出两个字符串 $s_1,s_2$,求 $s_2$ 在 $s_1$ 中出现的次数. 分析 预处理出两个字符串的哈希值,再逐位比较. 时间复杂度为 $O(n+m)$,和 $kmp$ 算法一样. 可 ...
- QPainter 提高绘制效率的方法
原文: https://my.oschina.net/u/3919756/blog/1944747 如果我们用painter一个一个的绘制直线,圆等在控件上,绘制效率会不高.为了提高效率,我们可以设置 ...
- javascript权威指南第14章 表单脚本示例代码
HTML部分 <!DOCTYPE html> <html> <head> <title></title> </head> < ...
- JZOJ 5870 地图
直接解释题解,记录一下.
- /etc/crontab
- Poj 2114 Boatherds(点分治)
Boatherds Time Limit: 2000MS Memory Limit: 65536K Description Boatherds Inc. is a sailing company op ...
- python中的关键字yield有什么作用?
保存当前运行状态,然后暂停执行,即将函数挂起.yield关键字后面表达式的值作为返回值返回.当使用next(),send()函数从断点处继续执行.
- Java基础系列 - try...catch...finally
package com.test6; import java.io.FileReader; import java.io.IOException; /** * try...catch...finall ...
- hashCode 的常规协定是:
hashCode 的常规协定是: . 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改 ...
- Dockerfile HEALTHCHECK详解
Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command(本次详细解释) 2.HEALTHCHECK NODE 意思是禁止 ...