CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

ClientDataSet问题

楼主wdsimon(我是谁?)2006-03-17 09:01:42 在 Delphi / 数据库相关 提问

程序为两层结构,控件关系如下:  
  DBGrid1--DataSource1--ClientDataSet1--DataSetProvider1--ADOQuery  
   
  如上,ClientDataSet1   post后,如何获取ClientDataSet1新增/修改/删除的记录?  
  注意:ClientDataSet1并不需ApplyUpdates到数据库. 问题点数:200、回复次数:16Top

1 楼zsjzwj(北极熊)回复于 2006-03-17 09:03:03 得分 0

用ClientDataSet2再取数进行比较Top

2 楼xiaocuo_zrf(小错——淫雄所贱略同)回复于 2006-03-17 09:08:11 得分 20

笨办法:  
  多置一个标记字段到ClientDataSet  
  新增的设置为   0   修改的设置为1,删除为假删除,设置为2  
  然后filter掉。  
  反正不用提交到数据库哦Top

3 楼wdsimon(我是谁?)回复于 2006-03-17 09:08:35 得分 0

ClientDataSet1内将会有好几千条记录,效率是否比较低呢?Top

4 楼wdsimon(我是谁?)回复于 2006-03-17 09:12:47 得分 0

to   小错:  
  那如何知道记录被修改(可修改字段有5个,如修改主键需记录修改前主键)呢,代码写在哪里?Top

5 楼xiaocuo_zrf(小错——淫雄所贱略同)回复于 2006-03-17 09:16:10 得分 0

修改主键需记录修改前主键  
  ---  
  Field不是有   OldValue   ,NewValue么Top

6 楼wdsimon(我是谁?)回复于 2006-03-17 09:21:22 得分 0

老王(闭关中)(182274401)   09:14:46  
  写在onChange里?    
  小错(37388732)   09:10:19  
  OnChange应该不行的。    
  小错(37388732)   09:10:51  
  不知道SetText行不行。或者   AfterPost    
  Top

7 楼xiaocuo_zrf(小错——淫雄所贱略同)回复于 2006-03-17 09:45:52 得分 0

刚刚试了几个办法,都没有能实现   :-(Top

8 楼hu1313(crazyguy)回复于 2006-03-17 09:49:12 得分 0

用ClientDataSet1.Delta来得到ClientDataSet1变动过的记录Top

9 楼xiaocuo_zrf(小错——淫雄所贱略同)回复于 2006-03-17 09:58:29 得分 0

嗯。可以考虑在  
  procedure   TForm3.DataSetProvider1BeforeUpdateRecord(Sender:   TObject;  
      SourceDS:   TDataSet;   DeltaDS:   TCustomClientDataSet;  
      UpdateKind:   TUpdateKind;   var   Applied:   Boolean);  
  begin  
   
  end;  
  这个事件下面实现....  
  应该是可以的  
  Top

10 楼xiaocuo_zrf(小错——淫雄所贱略同)回复于 2006-03-17 09:59:56 得分 0

不过你要先调用   ApplyUpdates。  
  然后再Applied   控制不提交。Top

11 楼wdsimon(我是谁?)回复于 2006-03-17 10:25:21 得分 0

to:月亮,哈欠,hu1313(crazyguy  
  用ClientDataSet1.Delta来得到ClientDataSet1变动过的记录是可以,但如何知道这些记录那些是修改前的,那些是修改后的,那些是新增/删除的呢?delta没有标记?  
  to:小错  
  BeforeUpdateRecord当中可以获知字段的状态,可以知道记录状态吗?Top

12 楼hu1313(crazyguy)回复于 2006-03-17 10:31:23 得分 60

cdsDefTemp.Data:=cdsSensorDefine.Delta;  
    cdsDefTemp.First;  
      with   cdsDefTemp   do  
        while   not   EOF   do  
          begin  
   
              if   UpdateStatus   =   usDeleted   then  
                  Status:='usDeleted';  
   
              if   UpdateStatus   =   usInserted     then  
                  Status:='usInserted';  
   
              if   UpdateStatus   =   usModified       then  
                  Status:='usModified';  
   
              if   UpdateStatus   =   usUnmodified       then  
                  Status:='usUnmodified';  
  Top

13 楼hongqi162(失踪的月亮)回复于 2006-03-17 10:38:42 得分 60

with   self.ClientDataSet1   do  
      begin  
          append;  
          fieldByName('cid').AsInteger:=12;  
          fieldByName('cName').AsString:='12';  
          post;  
   
      end;  
      self.ClientDataSet2.Data:=self.ClientDataSet1.Delta;  
      with   self.ClientDataSet2   do  
      begin  
          while   not   eof   do  
          begin  
              if   UpdateStatus   =   usDeleted   then  
                  showmessage('Deleted   ');  
              if   UpdateStatus   =   usInserted   then  
                  showmessage('Inserted');  
              if   UpdateStatus   =   usModified   then  
                  showmessage('Modified');  
              next;  
          end;  
      end;Top

14 楼hongqi162(失踪的月亮)回复于 2006-03-17 10:41:13 得分 0

呵呵,没有刷新帖子   和楼上的方法一样Top

15 楼halfdream(哈欠)回复于 2006-03-17 10:53:41 得分 60

蹭分蹭分中.....  
  参考provider.pas  
  function   TUpdateTree.DoUpdates:   Boolean;Top

16 楼wdsimon(我是谁?)回复于 2006-03-17 10:54:37 得分 0

好结贴Top

相关问题

  • datasetprovider and clientdataset
  • ClientDataSet: deletes are not allowed
  • ClientDataSet的问题!
  • clientdataset用法?
  • ClientDataSet应用
  • clientdataset的问题
  • 多线程与clientdataset
  • clientdataset 刷新问题!!!
  • clientdataset的commandtext问题?
  • ClientDataSet如何使用?

关键词

  • 修改
  • 字段
  • clientdataset
  • 小错
  • cdsdeftemp
  • usinserted
  • usdeleted
  • 记录
  • 删除
  • delta

得分解答快速导航

  • 帖主:wdsimon
  • xiaocuo_zrf
  • hu1313
  • hongqi162
  • halfdream

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo