以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- AddNew()竟然也会有问题! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=5729) |
-- 作者:bjljb -- 发布时间:2010/1/6 21:17:00 -- AddNew()竟然也会有问题! 在我设计的项目中,在一个按钮中包含有类似如下两行简单的代码: 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 -- 发布时间:2010/1/6 22:38:00 -- 不错,问题还是解决了,建议先用回老版本,用新版本测试运行项目各种细节功能没有问题,然后在用新版本. |
-- 作者:czy -- 发布时间:2010/1/6 22:49:00 -- 如果关闭ApplyFilter有效,你的数据是不是有筛选过? |
-- 作者:bjljb -- 发布时间:2010/1/7 0:18:00 -- 以下是引用czy在2010-1-6 22:49:00的发言:
如果关闭ApplyFilter有效,你的数据是不是有筛选过? 我试过,只要去掉这一句,问题就会再现。 [此贴子已经被作者于2010-1-7 9:26:34编辑过]
|
-- 作者:blackzhu -- 发布时间:2010/1/7 7:38:00 -- 不应该的.你还是将完整的代码贴上让大家看看.你那个新增行是针对主表还是关联表? |
-- 作者:bjljb -- 发布时间:2010/1/7 9:35:00 -- 我也是觉得不应该发生这样的情况! 其他代码都反复调试过了,只有这一处有AddNew(),并且确定没有相关的筛选动作。 |
-- 作者:kylin -- 发布时间:2010/1/7 9:43:00 -- 确实如此,当Table放在窗口当中就会不同步显示,应该说是Bug |