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


  共有18667人关注过本帖树形打印复制链接

主题: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ssqq
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:1003 威望:0 精华:1 注册:2008/12/2 22:51:00
  发帖心情 Post By:2010/1/6 22:38:00 [只看该作者]

不错,问题还是解决了,建议先用回老版本,用新版本测试运行项目各种细节功能没有问题,然后在用新版本.

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/1/6 22:49:00 [只看该作者]

如果关闭ApplyFilter有效,你的数据是不是有筛选过?

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


加好友 发短信 三级勋章
等级:童狐 帖子:273 积分:2072 威望:0 精华:0 注册:2008/9/5 23:31:00
  发帖心情 Post By:2010/1/7 0:18:00 [只看该作者]

以下是引用czy在2010-1-6 22:49:00的发言:
如果关闭ApplyFilter有效,你的数据是不是有筛选过?

我试过,只要去掉这一句,问题就会再现。
代码所在的窗口属于父表,只在窗口的AfterLoad事件中对其后台DataTable进行过动态加载,用的是LoadFilter和Load方法,目的是只加载和当前登录用户有关的数据;窗口打开之后就是数据录入过程,再也不会用到筛选。
另外一张关联子表要经常用到Filter方法,比如上述最后一行代码之后就会对子表进行筛选,目的是只显示和父表当前行相关的那些数据行。

我曾经试图在窗口中添加关联子表,但不知道为什么会影响到Tab顺序,导致按回车键之后不能按我预设的顺序跳转,所以只好放弃,改用普通Table。

[此贴子已经被作者于2010-1-7 9:26:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2010/1/7 7:38:00 [只看该作者]

 不应该的.你还是将完整的代码贴上让大家看看.你那个新增行是针对主表还是关联表?

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


加好友 发短信 三级勋章
等级:童狐 帖子:273 积分:2072 威望:0 精华:0 注册:2008/9/5 23:31:00
  发帖心情 Post By:2010/1/7 9:35:00 [只看该作者]

我也是觉得不应该发生这样的情况!

其他代码都反复调试过了,只有这一处有AddNew(),并且确定没有相关的筛选动作。

 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19223 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/1/7 9:43:00 [只看该作者]

确实如此,当Table放在窗口当中就会不同步显示,应该说是Bug


 回到顶部