起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 291|回复: 15

【结贴】DeltaDataSet报错[问题]**

[复制链接]
发表于 2009-2-2 11:43:11 | 显示全部楼层 |阅读模式
数据集dsTest上有两字段fieldA与fieldB,数据如下:
fieldA                 fieldB
ta_1                   tb_1
ta_2                   tb_2
ta_3                   tb_3
在保存按钮下写的代码
if ((dsTest.Active) and (not dsTest.UpdatesPending)) then
  begin
    Exit
  end
  else
  begin
    dsDelta := TDeltaDataSet.Create(dsTest);
    ......


问题:
1:在新增数据时,如果只点了新增按钮,而没有进行其它的操作(数据集设有自动填充字段),就保存的时候,代码执行到
dsDelta := TDeltaDataSet.Create(dsTest);
会报错 Delta is empty.
2:对数据进行修改时,比如上面的
ta_1                   tb_1
我将tb_1先改成tb_100,这个时候我不保存,再把tb_100改成tb_1
再进行保存,此时代码执行到
dsDelta := TDeltaDataSet.Create(dsTest);
会报错 Delta is empty.


请问我写的这个代码问题出在什么地方?这种情况应该怎样解决?
回复

使用道具 举报

发表于 2009-2-2 15:13:42 | 显示全部楼层
用一个异常处理把这段程序包住好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-2 15:45:46 | 显示全部楼层
没有其它的解决方法吗?我包住代码了那也存在这个问题啊,你说是不?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-2 15:50:40 | 显示全部楼层
既然都已经执行到了dsDelta := TDeltaDataSet.Create(dsTest)
那是不是可以说这个数据集是进行了新增或删除或修改操作的呢?
那为什么会报错嘛,有点困惑
回复 支持 反对

使用道具 举报

发表于 2009-2-2 17:10:53 | 显示全部楼层
楼主,如果你只是点了Insert而没有编辑,delta是没有数据的。
你可加一个判断条件:dsTest.ChangeCount
如果大于0,则delta不为空
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-2 18:30:03 | 显示全部楼层
好的~明天再来试一下~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-4 09:16:20 | 显示全部楼层
5楼的办法还是不行,
if (((dsTest.Active) and (not dsTest.UpdatesPending) ) or (dsTest.ChangeCount<=0)) then
  begin
    Exit
  end
  else
  begin
    dsDelta := TDeltaDataSet.Create(dsTest);
    try
      ......

我改成这样以后,else里面的代码一直不会执行,一下子就Exit了,我写的有问题吗?
回复 支持 反对

使用道具 举报

发表于 2009-2-4 09:39:49 | 显示全部楼层
如果您只是点击新建,然后直接保存,ChangeCount的值就一直是0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-4 09:49:41 | 显示全部楼层
我不是点新建直接保存的,我是把数据集上的数据修改了,从A值改成了B值,他也直接Exit了,没有执行下面的代码阿
回复 支持 反对

使用道具 举报

发表于 2009-2-4 10:08:26 | 显示全部楼层
那看看dsTest.Active 、 dsTest.UpdatesPending 、dsTest.ChangeCount  这些值是啥,应该是这个条件判断成立了,所以执行的 exit 的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 00:22 , Processed in 0.040806 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表