ClientDataSet中撤消与恢复操作及执行细节

利用ClientDataSet的XMLData成员是数据的XML表达,可以非常直观的观察在执行撤消恢复等操作的细节。帮助我们区分几种撤消与恢复操作的不同。

请注意下图中的 CHANGE_LOG的值ROW RowState项和程序标题ChangeCount在执行不同操作时的变化。

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

具体操作:

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

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

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

SQLDataSet1.CommandText:=SELECT * PERSONS;ClientDataSet1.Active:=true;

DBNavigator1.DataSource->DataSource1。

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

主要代码:

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

procedure TForm3.Button2Click(Sender: TObject);
begin
  //未POST前,取消操作
  ClientDataSet1.Cancel;
  ViewXMLData;
end;

procedure TForm3.Button3Click(Sender: TObject);
begin
  //取消当前条记录的操作
  //会操作CHANGE_LOG,并减少ChangCount计数
  ClientDataSet1.RevertRecord;
  ViewXMLData;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
  //可连续撤消操作,直到 CHANGE_LOG为空,并减少ChangCount计数
  ClientDataSet1.UndoLastChange(true);
  ViewXMLData;
end;

procedure TForm3.Button5Click(Sender: TObject);
begin
  //post后撤消操作,CHANGE_LOG会被清空,ChangCount被置0
  //一只撤消本地的全部操作
  ClientDataSet1.CancelUpdates;
  ViewXMLData;
end;

procedure TForm3.Button6Click(Sender: TObject);
begin
  //合并修改日志,合并后CHANGE_LOG会被清空,ChangCount被置0
  //合并后UNDO功能无效
  ClientDataSet1.MergeChangeLog;
  ViewXMLData;
end;

procedure TForm3.Button7Click(Sender: TObject);
begin
  //设置还原点
  tempPoint := ClientDataSet1.SavePoint;
  ViewXMLData;
end;

procedure TForm3.Button8Click(Sender: TObject);
begin
  //恢复还原点
  ClientDataSet1.SavePoint := tempPoint;
  ViewXMLData;
end;

procedure TForm3.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
  ViewXMLData;
end;

procedure TForm3.ViewXMLData;
begin
  Text := Format(‘ChangeCount: %d‘, [ClientDataSet1.ChangeCount]);
  // uses XMLDoc单元
  Memo1.Text := FormatXMLData(ClientDataSet1.XMLData);
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  ViewXMLData;
end;

由于录制软件非常吃内存,不能录制更详细,有兴趣的可以自己做更细致的测试。

这次由于录制软件吃光了内存PC直接死机,导致第四次写代码了-_-!,提醒下大家有重要的修改还是多保存或打打IDE的History功能吧。

后来又研究了下我用的这款录制软件,发现全是截的一张张BMP图片,我就呵呵了!反正免费将就用吧-_-。

时间: 2024-11-10 01:11:08

ClientDataSet中撤消与恢复操作及执行细节的相关文章

在Android中使用Handler和Thread线程执行后台操作

转载自:http://www.cnblogs.com/crazypebble/archive/2011/03/23/1991829.html 声明:此文在参考<解密Google Android>一书 和 Android视频教程(www.mars-droid.com). 大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候,我们会为应用程序专门写一个线程去执行这些复杂的数据操作.通过线程,可以执行例如:数据处理.数据下载等比较耗时的操作,同时对用户的界面不会产生影响

检测数据库当前是否有备份操作在执行中

以下脚本可以用于检测数据库当前是否有备份操作在执行中: SELECT DECODE(os_backup.backup + rman_backup.backup, 0, 'FALSE', 'TRUE') backup FROM (SELECT COUNT(*) backup FROM gv$backup WHERE status = 'ACTIVE') os_backup, (SELECT COUNT(*) backup FROM gv$session WHERE status = 'ACTIVE

iOS中对文件的操作

转自:http://marshal.easymorse.com/archives/3340 iOS中对文件的操作 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除 在Do

传递给数据库 &#39;master&#39; 中的日志扫描操作的日志扫描号无效

错误:连接数据库的时候提示:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 C:\Documents and Settings\Administrator>"C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release\setup.exe" /q /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS

什么是oracle自动恢复操作

这是由系统进行的恢复.无需人的管理和操作.一般当系统由于突然掉电而出现故障时用这种方法.当再次启动数据库就会进行自动恢复.    不像简单的DOS系统,oracle系统在运行时有许多事务要处理,并且存在许多进程.无论此时人是否对系统进行了操作,这些事务和进程都是存在并运行着的.因此,oracle系统非常复杂,绝不允许中途突然关电源,那样会使系统受到损害.    但是有时并非人自愿的,电源不好而突然掉电,或是未通知的突然停电,而又没有使用不间断电源UPS,则此时数据库系统将难免受到损害.由于掉电,

表误删记录恢复操作

表误删记录恢复操作 最近处理了个用户误删delete table 的故障,这里做了一个简单的汇总,文章内容整理自pub 里的各位大师的精粹,我这里偷个懒直接拿来用下. 基本处理思路: 1.如果还没有提交,用rollback.(应该不大可能.) 2.如果提交时间超过5分钟以上且小于undo_retention的设置,可以使用回闪功能.具体限制和操作可以参考:http://blog.itpub.net/post/468/15464 3.如果上述两条都不满足,可以使用logminer从redo中恢复,

【转】centOS中mysql一些常用操作

安装mysql yum -y install mysql-server 修改mysql配置vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记暂时修改一下编码(添加在密码下方): default-character-set = utf8 设置mysql随系统启动# chkconfig mysqld on ← 设置MySQL服务随系统启动自启动# chkconfig --list mysqld ← 确认MySQL自启动mysqld 0:off 1:off 2:on 3:o

xtrabackup全备操作和误删备份恢复操作

1.安装percona源rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm 2.使用yum安装percona-xtrabackup:yum -y install percona-xtrabackupyum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio* 3.安装结果rpm -qa |grep xtr

Linux文件误删除恢复操作

Linux文件误删除恢复操作 作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据.不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的 一.用运SecureCRT远程对操作系统上,查看一下当前系统版本号,及文件系统格式 二.为方便本次实验,我们新创建一文件. 三.执行删除操作 rm -rf  web_1.txt 四.运用,系统自还工具