在DatasetProvider的BeforeUpdateRecord中写功能。

解决方案 »

  1.   

    BeforeUpdateRecord那么我的记录还没添加进去啊。例如我的主表是对从表某个字段的统计运算,那么我更新从表的这个字段后应该触发更新主表的相应字段。如果我从表还没更新就去触发,那有什么意义呢。难道我到从表更新的结果集中取数据然后与从表本来字段值加加减减,然后再更新主表?这样无疑是相当麻烦的。如果我更新从表后再去更新主表,那么就只要简单的统计从表就行了。所以我还是觉得得After,而不Before
      

  2.   

    新开一个dateset来append数据,如果放弃,把这个dateset中的所有数据delete。
      

  3.   

    同意楼上的,不过实现触发器功能,还有更复杂的一面,请研究这段话,我以前说的:
    有一个好办法,可以这样,去掉所有的数据库的自动增长,改成在服务器端的中间层计算并修改,这时使用ClientDataSet.ApplyUpdate,仍然不能得到中间层修改的值,怎么办呢?在中间层的Provider的Option设置poProgateChanges为True,并且响应Provider的BeforeUpdateRecord事件,在这事件中设置DeltaDS.NewValue为你要的自动增长的值,同样的方法,这样任何的在这个事件中改变的值都能反映到ClientDataSet中,记住一点要用NewValue其它的都不会有用!!!,或者这样,不去掉数据库的自动增长,响应Provider的AfterUpdateRecord,通过SQL查询,或者存储过程的返回参数,得到Insert后的自动增长的值,赋值给DeltaDS.NewValue,这样也能将自动增长的值返回给ClientDataSet。这些方法是我看了一天的Provider的源程序才弄明白的,好好珍惜!!! 
      

  4.   

    但是在BeforeUpdateRecord的时候,前端的数据已经到了后端。其中DataSet是RDM中对于地表,你可以判断是主表还是从表,而DeltaDS则是前端过来的数据,可以进行处理。且该事件是每条记录触发一次,和触发器差不多。我认为完全可以胜任。