Foxtable(狐表)用户栏目专家坐堂 → AddNew()竟然也会有问题!


  共有17544人关注过本帖平板打印复制链接

主题:AddNew()竟然也会有问题!

帅哥哟,离线,有人找我吗?
bjljb
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 三级勋章
等级:童狐 帖子:273 积分:2072 威望:0 精华:0 注册:2008/9/5 23:31:00
AddNew()竟然也会有问题!  发帖心情 Post By:2010/1/6 21:17:00 [只看该作者]

在我设计的项目中,在一个按钮中包含有类似如下两行简单的代码:
r = .AddNew()
r("序号") = .Count
之前运行一直没有问题,后来更新到1229版本并数次修改DataColChanged、AfterLoad等事件代码之后,出现了一个莫名其妙的问题:
当满足新增行的条件时,点击该按钮,在对应的Table中看不到新增行,光标仍然停留在最末行,查看后台数据库却分明已经新增了一个空行,但其“序号”列并没有被赋新值。
这个问题并不是每次都出现,有的时候多次点击按钮之后又可以在Table中看到新增行,这严重影响了用户的正常操作,因为不能确定到底哪一次点击能够成功。

为了解决这个问题,我想尽了各种办法:
开始怀疑是版本问题,就用之前的版本反复测试,最终都被否定;
又怀疑是窗口AfterLoad事件代码的问题,经反复调试未果;
DataColChanged事件代码也没有找到任何有效线索……
浪费了两天时间,头都快要爆炸了,我干脆不去想它了!

冷静了一晚上之后,我决定用最原始的办法:不去管任何程序逻辑问题,逐行添加监控断点吧。
终于,在任何人都认为不可能出现问题的地方出问题了:就在这两行代码中间!
也就是说:AddNew()确实被执行了,后台数据库中新增的行就是它执行的结果,按理说这时新增的行在Table中应该是可见的,并且我没有进行任何隐藏、筛选、排序等操作,紧随其后的r("序号") = .Count应该能够被正确执行。
但现在的问题是:r刚刚被赋值为Tables("表名").AddNew(),但由于新增的行在Table中并没有出现,r("序号")现在不知道该怎么办了,无法被赋值为Tables("表名").Count,就任其空着,不了了之了!

这个问题我实在无法让其重现,也不便把项目文件上传,因为还牵扯到若干个几十万行的外部数据表,所以就啰里啰嗦地在这里叙述了一大堆,希望能引起老六的重视。

找到了原因,问题也就不难解决了。最终的解决方案是:
r = .AddNew()
.ApplyFilter = False '无奈之举,这应该是Foxtable的一个Bug
r("序号") = .Count
[此贴子已经被作者于2010-1-6 21:34:30编辑过]

 回到顶部