Foxtable(狐表)用户栏目专家坐堂 → 修改后的getvalues方法肯定有Bug


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

主题:修改后的getvalues方法肯定有Bug

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
修改后的getvalues方法肯定有Bug  发帖心情 Post By:2021/6/24 6:13:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:新版foxtable之结果.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:旧版foxtable结果.jpg
图片点击可在新窗口打开查看

偶然的原因发现2021.5.29版本当中datatable.getvalues方法有bug,有时候不能区分大小写,导致提取的值有重复的,以至于据此生成的报表也产生了错误。
我比较了旧的2020.5.1版本的计算结果,用同样的代码,链接同样的数据库(sql server),报表结果是不一样的。旧版的结果是对的。

诡异之处似乎并不是所有的大小写单词都不能区分,只有个别情况有问题。请仔细查查吧,估计你们不会很容易复现的,但请不要轻易放过了。这个bug带来的后果挺严重,会计年报都给做错了。
我把我的报表结果源代码附上,问题肯定出在Dim CustomerIDs  As List (of String) = DTB.GetValues("CustomerID", , "CustomerID asc") 的代码上。

另外我手工读了数据库,把customerID="Wyatt"名下的记录都看了个遍,并没有发现有小写字母开头的记录。所以这个报表结果就更诡异了一些。

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:02.txt


[此贴子已经被作者于2021/6/24 6:15:45编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1266 积分:7849 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2021/6/24 8:41:00 [只看该作者]

官方确实在5月1号后重写过getValues的方法,这个问题值得关注

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/24 9:48:00 [只看该作者]

请导出这个表数据做测试,不方便的可以发给客服测试

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


加好友 发短信
等级:八尾狐 帖子:1816 积分:19334 威望:0 精华:0 注册:2013/4/10 14:38:00
  发帖心情 Post By:2021/6/24 12:39:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:624.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:六尾狐 帖子:1266 积分:7849 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2021/6/24 14:36:00 [只看该作者]

如果按照都转换小写,这里确实有bug,不应该是这个,谜之重复判定规则

按照sql的语法,distinct是不区分大小写,然后遇到同名但大小写不同的行时,取遇到的第一个

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/24 15:16:00 [只看该作者]

我测试2019/2020/2021版getvalues都是不区分大小写的,也是取遇到的第一个

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2021/6/24 17:07:00 [只看该作者]

你们要是实在测不出来,能不能求求你们改成老版的算法, 我们不要求性能了行不行啊? 最近升版的几次大bug实在让我心力憔悴, 感觉这次升级引进的bug负面作用远远超过改进的这点性能. 再这么搞下去都不知道怎么办了, 整天提心吊胆的.

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/24 17:41:00 [只看该作者]

功能是只能改进,无法回头的。最好是做个例子发过来我们测试一下

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


加好友 发短信
等级:六尾狐 帖子:1266 积分:7849 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2021/6/24 20:52:00 [只看该作者]

但是就上面的图片,也解释不通为什么取的是第二个

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2021/6/25 5:36:00 [只看该作者]

我打算自己研究一个算法试试。 
按Foxtable这个趋势,还是尽量把算法多掌握在自己手里更踏实一些。

两个思路,具体效率可能需要大量的测试才能知道:

1. 利用List集合,(前提是.net内置的list查找算法效率够高,姑且信任他们), 依次从datatable的指定列取值,每个值转换大写(这个地方可能损失效率),存入List2, 判断List2.contains,false的话则把没转换大小写的值存入List1,一直遍历到最后一行,之后取出List1的值就是唯一值了。

这个或许用字典更快些?还没仔细研究二者区别。


2. 这个纯粹是自己玩了,效率不好说。先建立一维数组arr1 ,数组维度等于datatable的行数,将该列所有行的值全部写入数组,对数组进行排序,之后对每个数组元素循环,利用二分法在其中查找(数组下标不同作为约束条件),用“="号进行比较运算(这个可以自动忽略大小写),找到重复则跳过该值,找不到重复则保存该值到一个集合。最后得到的集合就是不重复值集合了。

这些算法只用于代替前台的getvalues方法,后台的getvalues方法可以用sql语句的distinct代替,那个是数据库内置的算法,效率肯定没得说。
前台加载数据量一般不会很大,所以也许效率上损失点,但换来了更好的稳定性,估计可以接受. 

我对算法不精通,这个两个思路肯定比较low,哪位同道若有更好的算法欢迎指导
[此贴子已经被作者于2021/6/25 6:38:44编辑过]

 回到顶部
总数 19 1 2 下一页