zoukankan      html  css  js  c++  java
  • TClientDataSet 手动修改Data数据

    使用TClientDataSet控件与DBGrid控件编辑显示数据窗口。

    在设计过程中,ClientDataSet与DBGrid放置在两个不同的动方,手工连接。由于ClientDataSet中的数据,部分在DBGrid中要求不显示。

    在新增的行中,隐藏的列是必填字段,不能为空值,如果提交到数据库中,当然要报字段不能为空的错了。

    要怎么才能手工加入隐藏的字段数据呢?

    ClientDataSet 有Data与Delte对象,前者为从数据源中取到内存的数据,后然是内存修改数据,等待更新到物理数据源中的数据。

    Delte中的数据可以通过创建一个新的ClientDataSet 对象来得到Data,能知道有哪些数据是等待提交的。但是新的ClientDataSet中的Data不能提交到前者ClientDataSet的Delte里。这个方法行不通了。Delte的只能用来查看数据,不能再修改。再者,如果是修改的数据,那么有两条,怎么判断修改的数据也是个麻烦的事。所以,Delte这里行不通。

    ClientDataSet有UpdateStatus方法,用来表述Data数据的Modify情况。哈~~可往这里发展。

    UpdateStatus的属性TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);

    Data中的数据,前面讲了,是从数据库中取到的内存数据,但是问题又来了,新的Insert的数据,这里面没有。怎么办?使用Post,提交到内存数据里面。只要没有ApplyUpdates过,UpdateStatus的值都没有重置过。

    if ClientDataSet.UpdateStatus = TUpdateStatus (usUnmodified, usModified, usInserted, usDeleted) then 来判断行的Modify状态吧。要手工加哪个就加哪个。但这个方法也有问题。

    在 while not eof do 循环中,每Next一次,就必须设置Edit一次,可以解决提示不能编辑的错(dataset not in edit or insert mode)。这个还没有找到是在哪里跳转的。

  • 相关阅读:
    用SQL查询方式显示GROUP BY中的TOP解决方法[转]
    三大UML建模工具Visio、Rational Rose、PowerDesign的区别
    Eclipse HTML Editor
    [转]跨平台开发:PhoneGap移动开发框架初探
    取消开机显示登陆页面
    PhoneGap开发环境搭建
    显示器不能全屏及开机慢解决方案
    调用webservice超时问题的解决[转]
    最简单的JAVA解析XML字符串方法
    适用于vue项目的打印插件(转载)
  • 原文地址:https://www.cnblogs.com/yanyyx/p/1314514.html
Copyright © 2011-2022 走看看